初めての「らせんアニメ」 4. 別方法検討

2023.02.11

アフィン変換の行列演算で線分を回転させてみました。スムーズに動くので、これを応用して「らせんアニメ」に挑戦してみます。ソースコードはPython 開発環境でお試しください。

# CS-1 螺旋部分2次元アニメ基礎検討その1   2023.02.11 by Kero
# 回転角に比例してらせん中心からの距離が長くなる「等差らせん」を作る。
# 接線の傾きをらせんの回転角とする。
# 各点における接線の傾きは点iから点i-1の傾きとする。

import sys
import signal
import time
import datetime
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation

fig, ax = plt.subplots()
# fig, ax = plt.subplots()
ax.set_aspect('equal')
artists = []

# 図の作成。例えば、x軸に平行な線分。
xi = np.linspace(0,180,181)
yi = [0.] * 181
zi = [1.] * 181

zu = np.concatenate([[xi], [yi], [zi]])
plt.plot(zu[0], zu[1], c='r') # これで元の線分表示。

# 回転のマトリックス設定。
def A(rd):
    Am = np.array([[np.cos(rd), -np.sin(rd), 0],
                  [np.sin(rd),  np.cos(rd), 0],
                  [0., 0., 1.]])
    return Am

# 例えば1°回転。
A01 = A(np.pi/180)

# 回転した図形表示。
for i in np.linspace(0, 2* np.pi,361):
        Ai = A(i)
        zu = np.dot(A01, zu)
        artist= ax.plot(zu[0], zu[1], c='b')
        artists.append(artist)

anim = ArtistAnimation(fig, artists, interval=30, repeat=True)
anim.save('kaiten-1.gif', writer='pillow')
        
plt.show()
plt.close()

コメントを残す

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