makizushi-04

レベル3. 2次元「代数らせん」アニメを回転させる

# 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()

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です