ロリツ環面

ロリツ環面

パラメトリック方程式を使って複雑な3次元曲線フラクタル構造を描画することができます。

ここでは、ロリツ環面という美しい曲面をパラメトリック方程式で表現する例を示します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def lortiz_surface(u, v, a=1, b=1, c=1):
x = a * np.cos(u) * np.cosh(v)
y = b * np.sin(u) * np.cosh(v)
z = c * np.sinh(v) * np.cos(u/2)
return x, y, z

u = np.linspace(-np.pi, np.pi, 100)
v = np.linspace(-np.pi, np.pi, 100)
U, V = np.meshgrid(u, v)

X, Y, Z = lortiz_surface(U, V)

fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='plasma')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

このコードの説明:

  1. lortiz_surface関数は、ロリツ環面パラメトリック方程式を実装しています。
    引数uvはパラメータ、abcはスケーリング係数です。

  2. np.linspaceを使って、パラメータuvの値を生成しています。

  3. np.meshgridを使って、uvの値から格子点を生成しています。

  4. lortiz_surface関数を呼び出して、格子点における曲面上の点の座標(X, Y, Z)を計算しています。

  5. plot_surface関数を使って、計算した座標から曲面をプロットしています。
    rstridecstrideは、プロットするポリゴンの密度を制御するパラメータです。
    cmap='plasma'でカラーマップを設定しています。

実行結果は以下のようになります。

[実行結果]

ロリツ環面は、非常に複雑で美しい形状をしています。
パラメトリック方程式を変更したり、異なる方程式を用いることで、さまざまな3次元曲線フラクタル構造を生成できます。

パラメトリック方程式は、3次元グラフィックスコンピューターグラフィックス数学的モデリングなど、さまざまな分野で利用されています。

結果解説

[実行結果]

ロリツ環面のグラフを詳しく説明します。

このグラフは、ロリツ環面と呼ばれる3次元曲面を表しています。
ロリツ環面は、パラメトリック方程式によって定義される曲面で、以下の3つの方程式で表されます。

$$
x = a * cos(u) * cosh(v)
$$
$$
y = b * sin(u) * cosh(v)
$$
$$
z = c * sinh(v) * cos(u/2)
$$
ここで、$u$ と$v$ はパラメータ、$a$、$b$、$c$ はスケーリング係数です。

グラフ中の曲面は、$u$ と $v$ のパラメータ値を$-π$から$+π$まで変化させながら、上記の3つの方程式から計算された$(x, y, z)$の座標値をプロットしたものです。

曲面の形状は、パラメータ$u$ が変化すると環状に回転し、$v $が変化するとくびれた部分ができる非常に複雑な構造になっています。
曲面全体は、ねじれた環状の形をしています。

カラーマップには”plasma”が使われており、曲面の高さ($z$座標値)に応じて青から赤へと連続的に色が変化するよう設定されています。
青い部分が低く、赤い部分が高くなっています。

背景は黒で、曲面の輪郭が浮き出るようになっており、3次元構造をよりわかりやすく表現できます。

$X$、$Y$、$Z$軸のラベルも付けられており、それぞれの座標軸の向きと大きさを把握しやすくなっています。

このようにパラメトリック方程式を用いることで、複雑で美しい3次元曲面をコンピューターグラフィックスで表現することができます。