初めての「らせんアニメ」2. なめらかに


2022.05.27

2番目のらせんアニメです。
動きがキモイイです。
画像表示の縦横サイズが制御できず、真円になっていません。対策検討中。
ソースコードは Python 開発環境で試行してください。
coil-2

【Python】

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()
artists = []

dag = 2*np.pi/12 # 曲げ角度初期値。ラジアン値。最終値はゼロ。

x = np.linspace(0, 100, 101) # x座標の初期値。ゼロから100まで。
y = [0.0] * 101 # y座標の初期値。すべてゼロ。
z = np.linspace(0, 1, 101) # ゼロから1まで100個の値。

for i in range(0, 101, 1):  # 巻き方制御
        z[i] = 0.005 * i

for eachx in range(101, 0, -1):
        for mag in range(100,eachx-1, -1):
                xsa = x[mag] - x[eachx-1]
                ysa = y[mag]
                the = np.arctan2(ysa, xsa)
                kyo = np.sqrt(np.square(xsa) + np.square(ysa))
                kai = the + dag * z[eachx-1]
                x[mag] = x[eachx-1] + kyo * np.cos(kai)
                y[mag] = y[eachx-1] + kyo * np.sin(kai)
        artist = ax.plot(x,y,"blue")
        artists.append(artist)

for eachx in range(0, 101, 1):
        for mag in range(eachx, 100, 1):
                xsa = x[mag+1] - x[eachx]
                ysa = y[mag+1] - y[eachx]
                the = np.arctan2(ysa, xsa)
                kyo = np.sqrt(np.square(xsa) + np.square(ysa))
                kai = the - dag * z[eachx]
                x[mag+1] = x[eachx] + kyo * np.cos(kai)
                y[mag+1] = y[eachx] + kyo * np.sin(kai)
        artist = ax.plot(x,y,"blue")
        artists.append(artist)

for t in range(0,50,1):
        artist = ax.plot(x,y,"blue")
        artists.append(artist)

anim = ArtistAnimation(fig, artists, interval=50)
anim.save("coil-2.gif", writer="pillow")

# plt.show()    

コメントを残す

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