続き
今さらですけど。自転車君をsympyとmatplotlibで作図してみました。
数列を使っていませんが、リストを使っています。
今回気づきましたが、問題用紙「P43のグラフ。原点(0,0)から(a1,0)に自転車君の太い実線」がありました。
myN=4の場合
myN=2の場合
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