アイキャッチ画像

リサジュー図形を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次元プロットする方法は こちらの記事 を、アニメーションを出力するには こちらの記事 を参照してください。

広告

未分類カテゴリの投稿

  • NHKのAIの番組を見て考えたことなど

    NHKのマネーワールドという番組を見て、ベーシックインカムについて少し考えてしまいました。

  • Pythonで描くリサジュー図形

    リサジュー図形(リサージュ図形)という図がありまして、それをPythonのmatplotlibを使って描いてみました。ついでにアニメーションしました。

  • カメラとAIによる補正について考えたこと

    Pixel3のカメラのAIによる暗部補正がすごい そうです。この記事を受けて、ソフトウェアでの補正さえあればカメラのメカ的な性能なんて低くてもかまわない的な意見を見まして、ちょっと考えてしまいました。

  • キーレスエントリーの電池を交換した話

    キーレスエントリーのキーの電池が切れるとのメッセージがメーターパネルに表示されたので、早速電池を交換してみました。車は、フィットハイブリッド(2015年モデル)です。

  • メキシコの北米向け自動車輸出

    アメリカのトランプ大統領が、メキシコからの輸入品に対する制裁関税を課すと発表しました。これを受けて自動車関連株に影響が出たとの報道がありまして、ちょっと考えてみました。

  • リサジュー図形を3次元的に描いてみる

    リサジュー図形(リサージュ図形)という図形がありまして、Pythonを使ってそれを3次元的にプロットしてみました。ついでにアニメーションもしてみました。

  • 自動車業界の近未来についての妄想

    SingulariySocietyというサロンで中島聡さんが 自動車業界の近未来 という投稿をされました。