# makizushi-04.py 2023.03.22 by Kero
# 最終目標は「巻きずしを作る3Dアニメ」です。
# 4. 2次元「代数らせん」アニメを回転させる(修正版) (makizushi-04.py)
# らせんの最外端が常に真下に来るように、らせんを描きながら回転させます。
# 前回のソースコードの解説(コメント文)を消し、今回の解説をします。
import sys
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation # 新規導入。
pi = np.pi
imgs = [] # 映画フィルム。1コマずつ追加していく。
# らせんの計算
maki = 3
r0 = 1
a = 2
kaku0 = 2 * pi * r0 / a
ara = 12
pon = maki * ara + 1
kaku = np.linspace(0, 2 * pi * maki, pon)
kakut = kaku + kaku0
r = a * kakut / (2 * pi)
x = r * np.cos(kakut)
y = r * np.sin(kakut)
# グラフ化
fig, ax = plt.subplots()
ax.set_aspect('equal')
ax.grid()
ax.set_xlim(-10,10)
ax.set_ylim(-10,10)
ax.scatter(0,0, c='r')
for i in range(1,pon+1):
rkak = -kakut[i-1] - pi/2 # さらにπ/2だけ逆回転。
xr = x[:i] * np.cos(rkak) - y[:i] * np.sin(rkak)
yr = x[:i] * np.sin(rkak) + y[:i] * np.cos(rkak)
img = ax.plot(xr, yr, c='b')
imgs.append(img) # plt.pause(0.1)に替えてimgをimgsに追加。
anime = animation.ArtistAnimation(fig, imgs) # デフォルトで200ミリ秒間隔。
plt.show()
plt.close()
sys.exit()