リサジュー図形を3次元的に描いてみる
リサジュー図形(リサージュ図形)という図形がありまして、Pythonを使ってそれを3次元的にプロットしてみました。ついでにアニメーションもしてみました。
2次元に描いたもの の3次元版です。
matplotlibで3次元プロットする
考え方としては単純です。
x、y、zの各座標をそれぞれ計算して、Matplotlibで3次元グラフにラインプロットするだけです。
各座標を描く数式をこのようにします。
x = cos(theta)
y = sin(theta)
z = sin(2 * theta + i)
thetaは0から2πとして、iを0から2πまで変化させたアニメーションを作ります。
プログラムはこうしました。
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# 図の準備
fig = plt.figure(figsize=(3,3))
ax = fig.gca(projection='3d')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# 座標の計算と描画
theta = np.linspace(0, 2*np.pi, 201)
delta_theta = np.linspace(0, 2*np.pi, 51)
ims = []
for i in delta_theta:
x = np.cos(theta)
y = np.sin(theta)
z = np.sin(2 * theta + i)
im = ax.plot(x,y,z, 'g')
ims.append(im)
# アニメーションとして出力する
ani = animation.ArtistAnimation(fig, ims, interval=20)
ani.save('li.gif', writer='imagemagick')
出力されるgifファイルはこうなります。
PythonでMatplot3Dを使って3次元プロットする方法は こちらの記事 を、アニメーションを出力するには こちらの記事 を参照してください。
公開日
広告