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