2022.06.03 → 06.04 修正 → 06.07 修正2
3番目のらせんアニメです。
やっと、代数らせんのアニメができましたが、巻いた後に展開するとき、途中で終わる不備があったので、それを修正しました。
画像表示の縦横サイズが制御できず、真円になっていません。img文に入れても、cssで指定してもダメでした。検討中。 → 06.07 修正しました。
ソースコードは Python 開発環境で試行してください。
【Python】
# らせんアニメ-3 coil-3-0604-1.py 巻き戻しの不備(57番目以降) を修正
# 回転角に比例してらせん中心からの距離が長くなるらせんを「等差らせん」とする。
# 接線の傾きをらせんの回転角とする。
# 各点における接線の傾きは点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(figsize=(10.0, 2.0))
artists = []
ri = 0 # らせん中心と各点との距離。最初は100番目の点の値。
sp = 1 # 点間の距離
xi = np.linspace(0, 100, 101) # 各点のx座標の初期値。ゼロから100まで。
yi = [0.0] * 101 # 各点のy座標の初期値。すべてゼロ。
do = np.linspace(0, 100, 101)
a = 4 * np.sqrt(2) / np.pi # 回転角とらせん中心からの距離との比例定数
do[100] = 0.0
for i in range(100, 0, -1):
do[i] = np.pi/2 - np.arctan2(ri, 1)
ri = np.sqrt(np.square(ri) + np.square(sp))
for eachx in range(101, 0, -1):
for mag in range(100,eachx-1, -1):
xsa = xi[mag] - xi[eachx-1]
ysa = yi[mag]
the = np.arctan2(ysa, xsa)
kyo = np.sqrt(np.square(xsa) + np.square(ysa))
kai = the + do[eachx -1]
xi[mag] = xi[eachx-1] + kyo * np.cos(kai)
yi[mag] = yi[eachx-1] + kyo * np.sin(kai)
artist = ax.plot(xi,yi,"blue")
artists.append(artist)
for eachx in range(0, 101, 1):
for mag in range(eachx+1, 101, 1):
xsa = xi[mag] - xi[eachx]
ysa = yi[mag] - yi[eachx]
the = np.arctan2(ysa, xsa)
kyo = np.sqrt(np.square(xsa) + np.square(ysa))
kai = the -do[eachx]
xi[mag] = xi[eachx] + kyo * np.cos(kai)
yi[mag] = yi[eachx] + kyo * np.sin(kai)
# print(eachx, mag, kyo, kai, xi[mag], yi[mag])
artist = ax.plot(xi,yi,"blue")
artists.append(artist)
anim = ArtistAnimation(fig, artists, interval=50)
anim.save("coil-3R2.gif", writer="pillow")
# plt.show()