0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

中学2年生のみなさんへ。〈4/5〉数列「2022年共通テスト数学ⅡB第4問(1)(2)配点20点」の自転車君をmatplotlibで作図してみました。

Last updated at Posted at 2022-02-25

続き

今さらですけど。自転車君をsympyとmatplotlibで作図してみました。
数列を使っていませんが、リストを使っています。

今回気づきましたが、問題用紙「P43のグラフ。原点(0,0)から(a1,0)に自転車君の太い実線」がありました。

myN=4の場合

myPolyN=4.png

myN=2の場合

myPolyN=2.png

sympyとmatplotlibで

myNで最大値を変更で対応しました。

教えて下さい。
最大値を入力しない方法は、ありますか?

from sympy import *
var('x y')
import matplotlib.pyplot as plt
def myJitensya(nMax):
    myPoly=[[0,0],[2,0]]
    i=2
    ans = solve([y - myPoly[i-2][1] - 1 * (x - myPoly[i-2][0]),
                 y - myPoly[i-1][1] - 2 * (x - myPoly[i-1][0])], [x, y])
    myPoly=myPoly+[[ans[x], ans[y]]]
    i=1
    for j in range(nMax):
        i=i+1
        myPoly=myPoly+[[myPoly[i][0]+1,myPoly[i][1]]]
        i=i+1
        ans=solve([y,y-myPoly[i][1]+2*(x-myPoly[i][0])],[x,y])
        myPoly=myPoly+[[ans[x],ans[y]]]
        i=i+1
        myPoly=myPoly+[[myPoly[i][0]+1,myPoly[i][1]]]
        i=i+1
        ans=solve([y-myPoly[i-2][1]-1*(x-myPoly[i-2][0]),
                   y-myPoly[i  ][1]-2*(x-myPoly[i  ][0])], [x,y])
        myPoly=myPoly+[[ans[x], ans[y]]]
    return myPoly
def myPolytLn(Ho,myLabel,myLinestyle):
    plt.plot([x[0] for x in Ho],[x[1] for x in Ho], mec='none', ms=4, lw=1, label=myLabel,linestyle=myLinestyle)
    for i in range(len(Ho)):
        if i % 2==0:
           myPos='right'
        else:
            myPos='left'
        plt.text(Ho[i][0], Ho[i][1], '({x}, {y})'.format(x=Ho[i][0], y=Ho[i][1]),
                  fontsize=6, horizontalalignment=myPos)
    return
def main():
    # myN=4
    myN=2
    myPoly=myJitensya(myN)
    print("Plot",myPoly)
    #以降作図
    plt.axes().set_aspect('equal')
    myPolytLn(myPoly,'myPoly','-')
    plt.legend(frameon=False, fontsize=10, numpoints=1, loc='upper left')
    # plt.savefig('myPoly.png', dpi=200)
    plt.show()
if __name__ == '__main__':
    main()

おまけ機能

print文は,文字数制限内?であれば、文字列をコピーして、wolframalphaで実行できます。

実行例)

実行時エラー)文字数制限を超える時

Oops, you've exceeded the maximum number of characters.

参考

(2022-03-13)

Mathematica code printing

つづく〈5/5〉へ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?