ジグザグ曲面

ジグザグ曲面

ジグザグ曲面の特徴と性質について詳しく説明します。

ジグザグ曲面は、sin関数cos関数の絶対値を掛け合わせた式:
$$
Z = |sin(X)| * |cos(Y)|
$$
で表される3次元曲面です。

この曲面には以下のような特徴があります。

1. 周期性

  • $X$軸方向には sin関数の絶対値が適用されているため、曲面は$X$方向に周期的な山と谷を形成します。
    この周期は2πです。
  • $Y$軸方向には cos関数の絶対値が適用されているため、曲面は$Y$方向にも同様に周期的な山と谷を形成します。
    ただし、この周期は$X$方向とは$π/2$ずれています。
  • 結果として、曲面全体としては格子状のジグザグ模様になります。

2. 連続性

  • 曲面は微分可能で連続的な形状をしています。
  • しかし、$X=nπ$($n$は整数)または$Y=nπ/2$($n$は整数)の直線上では不連続な尖った部分ができます。

3. 対称性

  • この曲面は、$X$軸と$Y$軸の両方に関して対称性を持っています。

4. Z値の範囲

  • $Z$値は$0$から$1$の範囲に収まります。
  • $X=nπ/2$、$Y=nπ($n$は$整数)の点で$Z=1$の最大値をとります。
  • $X=nπ$、$Y=nπ/2$($n$は整数)の点で$Z=0$の最小値をとります。

5. 局所的な形状

  • $X=nπ/2$、$Y=nπ$($n$は整数)近傍では、曲面は鋭い尖った山をつくります。
  • $X=nπ$、$Y=nπ/2$($n$は整数)近傍では、曲面は底の平らな谷をつくります。

6. グローバルな形状

  • 曲面全体を見ると、$X$方向と$Y$方向に波打つ格子状のジグザグ模様となります。
  • この模様は無限に続く周期関数なので、境界はありません。

このようにジグザグ曲面は、sin関数cos関数の絶対値から生まれる特徴的な周期的・格子状の形状を持った興味深い曲面です。

数学的には連続微分可能ですが、不連続点も存在します。

この曲面のユニークな形状は、3Dグラフィックスコンピューターグラフィックスなどの分野で活用されている曲面の一つです。

ソースコード

Pythonでジグザグ曲面をグラフ化する方法を説明します。

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

# フィギュアとAxes3Dを作成
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# グラフのタイトルとラベルを設定
plt.title('Zig-Zag Surface')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# グラフの範囲を設定
x = np.arange(-10, 10, 0.1)
y = np.arange(-10, 10, 0.1)
X, Y = np.meshgrid(x, y)

# ジグザグ曲面の方程式
Z = np.abs(np.sin(X)) * np.abs(np.cos(Y))

# 曲面をプロット
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis')

plt.show()

上記のコードでは、まずMatplotlibNumPyをインポートし、3Dプロットに必要なAxes3Dを作成しています。
次に、グラフのタイトルとラベルを設定し、プロットする範囲を設定しています。

ジグザグ曲面の方程式は、Z = np.abs(np.sin(X)) * np.abs(np.cos(Y))で表されます。
この式では、sincos絶対値を取ることでジグザグ模様を生成しています。

最後に、plot_surfaceメソッドを使ってジグザグ曲面を3Dグラフでプロットしています。

$rstride=1$, $cstride=1$は、グラフの解像度を制御するパラメータで、値を小さくするとより詳細なグラフが得られますが、計算コストが高くなります。

cmap='viridis'は、グラフの色を設定するパラメータです。

このコードを実行すると、ジグザグ模様の3D曲面がグラフ化されます。
グラフの範囲やカラーマップを調整すれば、様々な種類のジグザグ曲面を表示できます。

グラフ解説

[実行結果]

表示されるグラフを詳しく見ていきましょう。

1. 全体的な形状

  • グラフは3次元空間に浮かぶ曲面を表しています。
  • 曲面全体がジグザグ状の模様になっており、山と谷が規則正しく連なっています。

2. X軸方向の特徴

  • $X$軸方向には、sin関数の絶対値が適用されているため、曲面は規則的な山と谷を形成しています。
  • 山と谷の幅は一定ではなく、sin関数の周期によって変化しています。

3. Y軸方向の特徴

  • $Y$軸方向には、cos関数の絶対値が適用されているため、曲面は規則的な山と谷を形成しています。
  • しかし、$X$軸方向とは異なり、cos関数の位相がずれているため、山と谷の位置がずれています。

4. 高さ(Z軸)の変化

  • 曲面の高さ($Z$値)は、$sin(X)$と$cos(Y)$の絶対値の積で決まります。
  • 両者の値が$0$に近づくと、$Z$値も小さくなり、曲面の高さが低くなります。
  • 逆に、$sin(X)$と$cos(Y)$の絶対値がともに1に近づくと、$Z$値が最大になり、曲面の高さが最も高くなります。

5. 色分け

  • グラフにはviridisカラーマップが適用されています。
  • 曲面の高い部分は黄色がかった緑色で、低い部分は紫色で表示されています。
  • これにより、曲面の高低差が一目でわかりやすくなっています。

6. 解像度

  • rstride=1cstride=1を設定することで、グラフの解像度が高くなっています。
  • これにより、曲面の細かい凹凸がくっきりと表現されています。

このようにジグザグ曲面のグラフは、sin関数cos関数の絶対値を利用した特徴的な形状を持ち、カラーマップ解像度の設定により、その凹凸がよりわかりやすく表現されています。

クラインの壺

クラインの壺

クラインの壺は、非常に興味深い幾何学的形状です。

詳しく説明しましょう。

1. 発見と命名

クラインの壺は、1882年にドイツの数学者フェリックス・クラインによって発見された曲面です。
クラインは、この曲面の特性を研究し、「曲面が自分自身と交差しながら1つの体積を持つ」ことを発見しました。
そして、この形状を「壺(Fläche)」と名付けました。

2. 形状の特徴

クラインの壺は、3次元空間に埋め込まれた4次元物体の投影だと考えられています。
その形状は、ねじれた管状の構造が自己交差しており、内側と外側が連続しています。
つまり、曲面上の任意の点から出発して進むと、最終的には同じ点に戻ってくることになります。

3. 代数的表現

クラインの壺の形状は、複雑な代数方程式で表現されます。
その方程式は以下の通りです。

$$
(x^2 + y^2 + z^2 + 2y - 1)^3 - x^2z^3 - y^2z^3 = 0
$$

この方程式は、$x$、$y$、$z$の3変数で表された4次の代数方程式です。
この方程式を満たす点の集合がクラインの壺の形状を描きます。

4. トポロジー的性質

クラインの壺は、トポロジー的に非常に特殊な性質を持っています。
具体的には、ホモロジー群 $(H_0, H_1, H_2)$が$(Z, Z ⊕ Z, 0)$となります。
つまり、0次、1次のホモロジー群は自明ではありませんが、2次のホモロジー群は自明です。
これは、この曲面が「非方向付け可能」であることを意味しています。

5. 応用と意義

クラインの壺は、単なる数学的好奇心の対象ではありません。
物理学工学分野でも重要な役割を果たしています。
例えば、フォトニック結晶メタマテリアルの設計において、クラインの壺の形状を利用することで、新しい光学的性質を実現できる可能性があります。
また、一般相対性理論における時空のモデル化にも役立つと考えられています。

このように、クラインの壺幾何学トポロジー物理学など、様々な分野に関連する不思議な形状なのです。

ソースコード

クラインの壺をPythonでグラフ化するコードを書きます。

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

# クラインの壺の方程式
def klein_bottle(u, v):
x = -(3 + np.cos(u) * np.cos(v / 2)) * np.cos(u)
y = (3 + np.cos(u) * np.cos(v / 2)) * np.sin(u)
z = np.sin(u) * np.cos(v / 2)
return x, y, z

# パラメータ範囲
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, 2 * np.pi, 100)
U, V = np.meshgrid(u, v)

# クラインの壺の座標計算
X, Y, Z = klein_bottle(U, V)

# 3D プロット
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, rstride=2, cstride=2, cmap='viridis')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Klein Bottle')

plt.show()

このコードでは、まずクラインの壺の方程式を定義しています。
次に、np.linspacenp.meshgridを使って、曲面上の格子点データを作成します。
その後、クラインの壺の座標を計算し、plot_surfaceを使って3Dプロットを描画しています。

実行すると、クラインの壺の3Dグラフが表示されます。
figsizeで図のサイズを調整し、rstridecstrideプロットの解像度を変更できます。
カラーマップやタイトル、軸ラベルなども調整可能です。

グラフ解説

[実行結果]

このグラフに表示される内容を説明します。

1. 形状

グラフで表示されている形状は、クラインの壺と呼ばれる代数幾何学的な曲面です。
クラインの壺は、一つの体積を持つ非方向付け可能な曲面で、自己交差しています。
つまり、自分自身と交差する箇所があります。

この特異な形状は、3次元空間にはめ込むことができない4次元物体を3次元に投影したものだと考えられています。

2. 構造

よく見ると、クラインの壺の内側には、ねじれた管状の構造があることがわかります。
この管は一重ではなく、二重に折り重なっています。
さらに、この管は途中で自己交差しており、内側と外側が連続していることがわかります。

3. 対称性

クラインの壺回転対称性を持っています。
つまり、任意の軸周りに回転させても形状は変わりません。
また、上下逆さまにしても同じ形状になります。

4. 色分け

グラフでは、曲面の各点にカラーマップが適用されています。
ここではviridisという色を使用していますが、他の色も選択可能です。
この色分けにより、曲面の立体感が強調されています。

5. 解像度

rstridecstrideのパラメータで、プロットの解像度を調整できます。
値を大きくすると解像度が下がり、小さくすると解像度が上がります。
解像度が高すぎると計算コストが大きくなります。

このようにクラインの壺は、非常にユニークな形状と性質を持つ曲面です。
数学幾何学の分野で重要な役割を果たしており、様々な物理現象のモデル化にも役立てられています。

カタロイド曲面

カタロイド曲面

カタロイド曲面(Catenoid)は、2つの同心の円周から生成される最小表面積の回転曲面です。

この曲面は以下の性質を持っています。

1. 形状

  • カタロイド曲面は、両端が開いた鞍馬形状の曲面です。
  • 中央部分は細く絞られ、両端に向かって徐々に広がる形状をしています。
  • 曲面の形状は、吊り橋のケーブルの形状に似ています。

2. 方程式

  • カタロイド曲面の方程式は、$x^2/a^2 + y^2/b^2 - z^2/c^2 = 1 $で表されます。
  • $a$、$b$、$c$はそれぞれ$x$、$y$、$z$軸方向の半径を表す定数です。
  • $a=b=c$の場合は回転体となり、$a≠b≠c$の場合は楕円形の形状になります。

3. minimumの性質

  • カタロイド曲面は、2つの同心円周を通る最小表面積の曲面です。
  • つまり、この形状は与えられた2つの円周に接する曲面の中で、最小の表面積を持つ曲面となります。
  • この性質は、石けんの膜が示す現象と関連しています。

4. 応用例

  • カタロイド曲面の形状は、建築物の屋根設計橋梁設計に応用されています。
  • 最小表面積の性質により、材料コストを抑えつつ強度を確保できるためです。
  • また、この曲面は液体の表面張力による現象を説明する際にも使われます。

5. 曲面パラメータ

  • カタロイド曲面の形状は、$a$、$b$、$c$の値によって変化します。
  • $a=b=c$のとき球面と一致し、$a=b≠c$のときは回転楕円体、$a≠b≠c$のとき一般の楕円形になります。

このように、カタロイド曲面は興味深い数学的幾何学的性質を持ち、実用面でも活用されている曲面です。

ソースコード

カタロイド曲面の方程式は以下のように表されます。

$$
x^2/a^2 + y^2/b^2 - z^2/c^2 = 1
$$

ここで、$a$、$b$、$c$はそれぞれ$x$、$y$、$z$軸方向の半径を表す定数です。

この方程式をPythonで解いてグラフ化するコードは以下のようになります。

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

# パラメータの設定
a = 3 # x軸方向の半径
b = 2 # y軸方向の半径
c = 1 # z軸方向の半径

# グリッドデータの作成
u = np.linspace(-np.pi, np.pi, 100)
v = np.linspace(0, 2*np.pi, 100)
U, V = np.meshgrid(u, v)
X = a * np.cosh(U) * np.cos(V)
Y = b * np.sinh(U) * np.sin(V)
Z = c * V

# 3D描画
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='plasma')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

このコードでは、まずnumpymatplotlibライブラリをインポートしています。

次に、カタロイド曲面の$x$、$y$、$z$軸方向の半径$a$、$b$、$c$を設定しています。

その後、np.linspace関数np.meshgrid関数を使って、$u$、$v$座標のグリッドデータを作成しています。
そして、カタロイド曲面の方程式に従って$X$、$Y$、$Z$座標を計算しています。

最後に、matplotlib.pyplot.plot_surface関数を使って3D曲面をプロットしています。
cmapパラメータでカラーマップを設定しています。

実行すると、カタロイド曲面の形状が3D空間上にグラフ化されます。
パラメータ$a$、$b$、$c$を変更することで、カタロイド曲面の形状を調整できます。

グラフ解説

[実行結果]

このコードで生成される3D グラフには、以下の内容が表示されています。

1. カタロイド曲面の形状

  • カタロイド曲面は、両端が開いた形状で、鞍馬のようなくぼみを持つ曲面です。
  • この曲面は、$x^2/a^2 + y^2/b^2 - z^2/c^2 = 1 $の方程式で表されます。
  • コードでは、$a=3$、$b=2$、$c=1 $としているため、$x$軸方向に最も伸びた楕円形の形状になっています。

2. カラーマップ

  • 曲面は、plasma というカラーマップで色付けされています。
  • このカラーマップは、青から赤へと徐々に変化する色で曲面を表示します。
  • 曲面の高い部分は赤に近い色で、低い部分は青に近い色で表示されます。
  • カラーマップによって、曲面の形状の違いがより視覚的に分かりやすくなります。

3. 軸ラベル

  • グラフには、$X$、$Y$、$Z$軸のラベルが付けられています。
  • これにより、3次元空間上での曲面の位置関係が分かりやすくなります。

4. グリッド

  • 曲面にはグリッド線が引かれており、曲面の形状をより詳細に確認できます。
  • グリッド線の密度は、$u$、$v$の値で調整できます。

このようにカタロイド曲面のグラフでは、曲面の形状色付け軸ラベルグリッドなどの要素が視覚化されており、3次元の曲面を理解するのに役立ちます。

球面方程式

球面方程式

球面方程式は、3次元空間における球の形状を定義する方程式です。

一般的に次のように表されます。

$$
x^2 + y^2 + z^2 = r^2
$$

ここで、$(x)$、$(y)$、$(z)$は球面上の点の座標であり、$(r)$は球の半径です。

この方程式では、球面上の点の座標 $ (x)$、$(y)$、$(z) $に関するすべての組み合わせが、半径 $ (r) $の球面上に存在するかどうかを判定します。

具体的には、球面上の点の座標を代入したとき、等式が成立する点が球面上に存在することを示します。

球面方程式は、数学物理学などのさまざまな分野で使用されます。
例えば、天体力学では天体の運動を記述する際に使用され、幾何学では3次元空間の図形を解析する際に使用されます。

球面方程式を理解することで、球の形状性質についての理解を深めることができます。
また、球面方程式を解析することで、球面上の点の位置球の体積などの重要な情報を得ることができます。

Pythonで球面方程式を解いてグラフ化する方法は、Matplotlibを使用して3次元プロットを作成することです。

以下は、その方法の例です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 球の半径を設定
r = 5

# θ(傾斜角)とφ(方位角)の範囲を設定
theta = np.linspace(0, np.pi, 100)
phi = np.linspace(0, 2*np.pi, 100)

# θとφの値から球面方程式を解く
theta, phi = np.meshgrid(theta, phi)
x = r * np.sin(theta) * np.cos(phi)
y = r * np.sin(theta) * np.sin(phi)
z = r * np.cos(theta)

# カラーマップを指定して3次元プロット
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, z, cmap='viridis')

# 色バーの追加
fig.colorbar(surf)

# 軸ラベルの設定
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# グラフの表示
plt.show()

このコードでは、NumPyを使用して$x$、$y$、$z$の値を生成し、これらの値を球面方程式に代入して$ (x^2 + y^2 + z^2 - r^2) $を計算します。

その後、Matplotlibを使用して等高線プロットを作成し、球面をグラフ化します。

[実行結果]

ソースコード解説

ソースコードの各部分を説明します。

1. ライブラリのインポート:

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
  • numpyは数値計算を行うためのライブラリです。
    npとしてインポートされます。
  • matplotlib.pyplotはグラフ描画のためのライブラリです。
    pltとしてインポートされます。
  • mpl_toolkits.mplot3dは3次元のグラフ描画のためのライブラリです。
    Axes3Dとしてインポートされます。

2. 球のパラメータ設定:

1
r = 5
  • r球の半径を表します。

3. 角度の範囲設定:

1
2
theta = np.linspace(0, np.pi, 100)
phi = np.linspace(0, 2*np.pi, 100)
  • thetaphiは、傾斜角($θ$)と方位角($φ$)の範囲を設定します。
    それぞれ、$0$から$π$(円周率)までの範囲と、$0$から$2π$までの範囲に、$100$個の等間隔の点が作成されます。

4. 球面方程式の解:

1
2
3
4
theta, phi = np.meshgrid(theta, phi)
x = r * np.sin(theta) * np.cos(phi)
y = r * np.sin(theta) * np.sin(phi)
z = r * np.cos(theta)
  • meshgrid関数を使用して、thetaphiの値から格子点を生成します。
    これにより、球面上の各点の角度が得られます。
  • それぞれの座標$ (x)$、$(y)$、$(z) $は、球面方程式 $(x^2 + y^2 + z^2 = r^2) $に基づいて計算されます。

5. 3次元プロット:

1
2
3
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, z, cmap='viridis')
  • figure()関数を使用して新しい図を作成し、add_subplot()メソッドを使用して3次元サブプロットを追加します。
  • plot_surface()メソッドを使用して、球面をプロットします。
    カラーマップは 'viridis' が指定されています。

6. 色バーの追加:

1
fig.colorbar(surf)
  • colorbar()関数を使用して、色バーをプロットに追加します。

7. 軸ラベルの設定:

1
2
3
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
  • set_xlabel()set_ylabel()set_zlabel()メソッドを使用して、$X$軸、$Y$軸、$Z$軸のラベルを設定します。

8. グラフの表示:

1
plt.show()
  • show()関数を使用して、グラフを表示します。

これらの手順を経て、3次元の球面がプロットされ、対応する色バーと軸ラベルが表示されます。

グラフ解説

[実行結果]

このプロットは、3次元空間における球面を可視化しています。

以下に、グラフに表示される内容を詳しく説明します。

1. 球面の形状:

球の半径は設定されており、球面はその半径によって決定されます。
球の中心は原点に位置します。

2. 色マッピング:

カラーマップ'viridis' に設定されています。
このカラーマップは、低い値を暗い色で表し、高い値を明るい色で表します。
球面上の各点の高さ($z$座標)に応じて、カラーマップに基づいた色が割り当てられます。

3. 色バー:

カラーバーは色マッピングに関連付けられており、色と値の対応関係を示します。
色バーの端には最小値最大値が示され、中央には中間値が示されます。

4. 軸ラベル:

各軸には ‘X’、’Y’、’Z’ のラベルが付いています。
これらのラベルは、それぞれの軸が何を表しているかを示します。
$X$軸と$Y$軸は水平面上にあり、$Z$軸は垂直方向に向かっています。

このグラフは、球面の形状色彩を明確に示し、球面上の各点の高さに基づいてカラーを割り当てることで、視覚的に豊かな情報を提供しています。

バッジャー曲面

バッジャー曲面

バッジャー曲面は、代数幾何学における重要な代数曲面の一つです。

その特徴は以下の通りです。

【方程式】

バッジャー曲面は次の代数方程式で表されます。

$$
x^2(y^2 + z^2 - 1)^3 - y^2z^3 = 0
$$

この方程式は、18世紀のスイスの数学者ミシェル・バッジャーによって発見されました。

【次元と次数】

バッジャー曲面は3次元空間内の代数次数が$4$の代数曲面です。
つまり、座標$(x,y,z)$の4次の項までを含む方程式で表されます。

【特異点】

バッジャー曲面には原点$(0,0,0)$に特異点があります。
この特異点は、二重点と呼ばれる特殊な種類の特異点です。

【対称性】

バッジャー曲面は$x$軸と$y$軸に関して回転対称ですが、$z$軸に関しては対称ではありません。

【位相的性質】

バッジャー曲面は、中心に1つの無限小の穴を持つ連結成分から成る。
この穴の周りには、複雑な形状をした稜線があります。
曲面全体は、自己交差がない連続した面となっています。

【代数幾何学での重要性】

バッジャー曲面は、代数的に決定された曲面の基本的な例として重要視されています。
また、特異点の性質を研究する上でも重要な対象とされています。
複雑な形状ゆえに、可視化の題材としても用いられています。

このように、バッジャー曲面代数幾何の分野で重要な地位を占め、数学的な美しさと興味深い性質を併せ持つ代表的な代数曲面です。

ソースコード

バッジャー曲面をPythonでグラフ化するコードは以下のようになります。

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

# グリッドを作成
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)

# バッジャー曲面の方程式
Z = (X**2 * (Y**2 + 1)**(3/2) + Y**2 * (X**2 * (Y**2 + 1))**(3/2)) / (X**2 + Y**2 + 1)**(3/2)

# 3D プロット
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

このコードでは、最初にnumpy を使ってグリッドを作成しています。

次に、バッジャー曲面の方程式を使って、$Z $座標を計算しています。

最後に、matplotlib を使って3D プロットを描画しています。

実行すると、バッジャー曲面の形状が3D グラフィックで表示されます。

[実行結果]

ソースコード解説

ソースコードを詳しく説明します。

1 : 必要なライブラリのインポート

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

ここでは、NumPy(数値計算ライブラリ)Matplotlib(プロットライブラリ)、および3Dプロット用のAxes3Dモジュールをインポートしています。

2 : グリッドデータの生成

1
2
3
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)

この部分では、NumPylinspaceおよびmeshgrid関数を使って、$-2$から$2$までの範囲で$100$個の点からなるグリッドデータ$X$、$Y$を生成しています。
このグリッドデータは、曲面をプロットする際の基準となります。

3 : バッジャー曲面の方程式による座標値Z計算

1
Z = (X**2 * (Y**2 + 1)**(3/2) + Y**2 * (X**2 * (Y**2 + 1))**(3/2)) / (X**2 + Y**2 + 1)**(3/2)

ここでは、さきほど生成したグリッドデータ$X$、$Y$を使って、バッジャー曲面の方程式に従って$Z$座標値を計算しています。
この計算式は非常に複雑で、代数的な操作が多数含まれています。

4 : Matplotlibを使った3Dプロット

1
2
3
4
5
6
7
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

最後に、Matplotlibを使って3Dプロットを描画しています。
まず、新しい図とその中の3D表示領域を設定しています。
次に、plot_surface関数を使って$X$、$Y$、$Z$データから曲面をプロットし、viridisという色マップを適用しています。
rstride、cstrideパラメータは、プロットの密度を制御するものです。
最後に、各軸にラベルを設定し、show関数で最終的に図を表示しています。

このコードを実行すると、バッジャー曲面の特徴的な形状を描いた3Dプロットが表示されます。
複雑な方程式から生み出された美しい曲面を可視化できます。

グラフ解説

[実行結果]

バッジャー曲面のグラフは、3次元空間内に存在する面の形状を表しています。

その特徴的な形状は以下のようになっています。

1. 中心部分

穴の開いたドーナツ状の形をしています。
この穴は、$xy$平面上の単位円と交差する部分です。

2. 外側の面

滑らかに湾曲した半球状の形をしており、中心の穴を取り囲んでいます。
この面は、外側に向かうにつれて徐々に開き、縁が外側に反り返るような形状になっています。

3. 全体的な形状

上下対称ではなく、$x$軸と$y$軸に対して回転対称な形をしています。

4. 表面

なめらかな部分と尖った稜線が混在しています。
特に中心の穴の周りには、鋭い稜線が集中しています。

5. 曲面の外側の縁

滑らかな曲線からなる開口部になっています。

6. 曲面全体

複雑な形状ながらも滑らかな連続した面で構成されており、自己交差はありません。

この特異な形状は、バッジャー曲面の方程式から導かれる代数的な性質によって生み出されています。

この面は、代数幾何学の分野で重要な研究対象となっており、複雑な構造を持つ代表的な代数曲面の一つとして知られています。

カーディオイド曲線

カーディオイド曲線

カーディオイド曲線は、数学的に興味深い図形のひとつで、心臓の形に似ていることからその名がついています。
以下にカーディオイド曲線の特徴と数学的な性質を説明します。

1. 数学的表現:

カーディオイド曲線の極座標方程式は以下のように表されます:
$$
r = a(1 - \cos(\theta))
$$
ここで、$( r ) $は極座標系における距離、$( \theta ) $は極座標系における角度、$( a ) $は定数です。

2. 形状:

カーディオイド曲線は、原点を中心とする座標系において、放射状に伸びる葉っぱ状の形状をしています。
一般的には外側の葉っぱがより大きく、内側の葉っぱがより小さくなります。

3. 対称性:

カーディオイド曲線は$ ( x ) $軸に対して対称です。
すなわち、$( \theta = 0 ) $および$ ( \theta = \pi ) $のときに曲線は$ ( x ) $軸と交わります。

4. 極限:

カーディオイド曲線は、極限$ ( a \rightarrow 0 ) $のときに原点に収束し、極限$ ( a \rightarrow \infty ) $のときに外側の葉っぱが無限遠方に広がります。

5. 応用:

カーディオイド曲線は数学的な興味の対象としてだけでなく、様々な応用があります。
例えば、物理学工学の問題、またグラフィックデザインアートなどの分野で使われることがあります。

カーディオイド曲線は、その美しい形状や数学的な特性から、多くの人々に愛される図形のひとつです。

ソースコード

Pythonでカーディオイド曲線を解いてグラフ化するコードは以下のようになります:

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

# パラメータ
a = 1.0

# 角度の範囲
theta = np.linspace(0, 2 * np.pi, 1000)

# カーディオイド曲線の方程式
r = a * (1 - np.cos(theta))

# 極座標から直交座標系に変換
x = r * np.cos(theta)
y = r * np.sin(theta)

# グラフ描画
plt.plot(x, y)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Cardioid Curve')
plt.axis('equal')
plt.grid(True)
plt.show()

このコードは、カーディオイド曲線の方程式を解いて、極座標から直交座標系に変換し、結果をグラフ化します。

[実行結果]

ソースコード解説

以下にソースコードの詳細を解説します。

1. ライブラリのインポート:

  • numpymatplotlib.pyplotをインポートします。
    これらのライブラリは、数値計算やグラフ描画のために使用されます。

2. パラメータの設定:

  • aという名前の定数が$1.0$に設定されています。
    これはカーディオイド曲線の定数です。

3. 角度の範囲の生成:

  • np.linspace()関数を使用して、$0$から$(2\pi)$までの範囲を$1000$の等間隔で分割した角度の配列thetaを生成します。

4. カーディオイド曲線の方程式の計算:

  • カーディオイド曲線の極座標方程式$ ( r = a(1 - \cos(\theta)) ) $を使用して、各角度に対する距離$ (r) $を計算します。

5. 極座標から直交座標系への変換:

  • 極座標から直交座標系への変換を行います。
    これにより、各点の$(x)$座標と$(y)$座標が計算されます。

6. グラフの描画:

  • plt.plot()関数を使用して、直交座標系に変換された$(x)$と$(y)$の値をプロットします。
  • plt.xlabel()plt.ylabel()を使用して、それぞれの軸にラベルを設定します。
  • plt.title()を使用して、グラフのタイトルを設定します。
  • plt.axis('equal')を使用して、軸のスケールを等しく設定します。
  • plt.grid(True)を使用して、グリッドを表示します。
  • plt.show()を使用して、グラフを表示します。

これにより、カーディオイド曲線が計算され、直交座標系に変換されてグラフ化されます。

グラフ解説

[実行結果]

このカーディオイド曲線のグラフは、極座標系で表される曲線を直交座標系に変換して描画したものです。

  • $X$軸と$Y$軸は直交座標系を表し、中心が原点になります。
  • カーディオイド曲線は、原点を中心とする座標系において、ある定数$ ( a ) $に対して極座標$ ( r ) $と角度$ ( \theta ) $の関係を表します。
  • グラフ上の曲線は、カーディオイド曲線の各点に対応し、$ ( x ) $軸と$ ( y ) $軸の値を持っています。
  • 曲線の形状は、原点を中心に放射状に伸びる葉っぱ状の形をしています。
  • カーディオイド曲線は、数学的に興味深い図形であり、心臓の形に似ていることから「カーディオイド(心臓状)」という名前がついています。

グラフには、原点を中心にしたカーディオイド曲線が描かれ、$X$軸と$Y$軸の目盛りが表示されています。

また、グリッドが表示され、各点の位置関係が視覚的に把握しやすくなっています。

エルミート曲面

エルミート曲面

エルミート曲面は、数学的に洗練された曲面であり、二次元平面上の2つの曲線3次元空間に拡張することで作られます。
この曲面は、二次元の曲線が空間内でどのように変形するかを視覚化するために使用されます。

エルミート曲面は通常、2つのパラメータを持つ関数で定義され、それぞれのパラメータによって曲面がどのように変化するかが決まります。
一般的に、これらのパラメータは曲面の位置と方向を制御します。


エルミート曲面は、多くの応用分野で使用されています。

例えば、コンピュータグラフィックスCAD(コンピュータ支援設計)ソフトウェアで、自然な曲面を作成するために使用されます。
また、ロボティクス航空宇宙工学などの分野でも、曲面のモデリングに広く活用されています。

エルミート曲面の特徴は、滑らかで美しい曲線を生成する能力にあります。
これにより、複雑な形状曲面を簡単に表現することができ、設計や可視化のプロセスを効率化することができます。

エルミート曲面は、2つの直交する平面曲線を回転させて生成される曲面です。

以下は、Pythonでエルミート曲面を解いてグラフ化する方法の例です。

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

# パラメータの範囲
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(-1, 1, 100)
U, V = np.meshgrid(u, v)

# エルミート曲面の方程式
x = np.cosh(V) * np.cos(U)
y = np.cosh(V) * np.sin(U)
z = np.sinh(V)

# グラフ化
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis')

# 軸ラベル
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# タイトル
plt.title('Hermite Surface')

# グラフ表示
plt.show()

このコードでは、エルミート曲面のパラメータを生成し、その方程式を定義しています。

そして、Matplotlibを使用して3次元グラフを描画しています。

[実行結果]

ソースコード解説

以下、コードの詳細な説明です。

1. ライブラリのインポート:

  • numpy:数値計算を行うためのライブラリ。
  • matplotlib.pyplot:グラフ描画のためのライブラリ。
  • mpl_toolkits.mplot3d:3次元のグラフ描画のためのツールキット。

2. パラメータの範囲の設定:

  • uvはそれぞれパラメータの範囲を指定する配列です。
  • np.linspace(start, stop, num)は、startからstopまでの範囲をnum個の等間隔に区切った配列を生成します。

3. パラメータのメッシュグリッドの作成:

  • np.meshgridを使って、uvの組み合わせでのメッシュグリッド$(U, V)$を生成します。

4. エルミート曲面の方程式の計算:

  • エルミート曲面の方程式を用いて、$x$、$y$、$z$の値を計算します。
  • ここでは、エルミート曲面のパラメータ表現が使用されています。

5. グラフの描画:

  • plt.figure()を用いて新しい図を作成し、add_subplot()を使用して3Dのサブプロットを作成します。
  • plot_surface()関数を使用して、曲面を描画します。

6. 軸ラベルとタイトルの設定:

  • set_xlabel()set_ylabel()set_zlabel()を使用して、それぞれの軸にラベルを設定します。
  • plt.title()を使用してグラフのタイトルを設定します。

7. グラフの表示:

  • plt.show()を呼び出して、描画したグラフを表示します。

これにより、エルミート曲面が3Dプロットされ、その軸ラベルとタイトルが付加されたプロットが表示されます。

結果解説

[実行結果]

このグラフは、エルミート曲面を立体的に表現しています。
エルミート曲面は、2つの直交する平面曲線を回転させて生成される曲面であり、その形状は特徴的な波状の曲線を持ちます。

グラフの中心には曲面の頂点があり、それを中心に波状の曲面が放射状に広がっています。
曲面の外側は高くなり、内側に向かって徐々に低くなっていく形状をしています。

曲面の色は、高度($Z$軸方向)に応じて変化しており、上部は明るく下部は暗くなっています。
これにより、曲面の形状が視覚的に強調されます。

グラフの軸ラベルは、$X$、$Y$、$Z$の各方向を示しており、それぞれの軸がどの方向に向かっているかを示しています。

このグラフは、エルミート曲面の形状と特性を直感的に理解するのに役立ちます。

カタロイド曲面

カタロイド曲面

カタロイド曲面は、2つの円錐の底面を共有する形状の曲面です。

その特徴は以下のとおりです。

1. 形状

  • カタロイド曲面は、2つの円錐の底面を共有する面で構成されています。
  • 中心部分には穴が開いた形状になっています。
  • 曲面は中心から離れるにつれて高さが低くなっていきます。

2. 方程式

  • カタロイド曲面の方程式は、$x^2 + y^2 - (x^2 + y^2)^2 = 0$ で表されます。
  • この方程式は、平面上の点$(x, y)$の座標と、その点におけるz座標の値の関係を示しています。

3. 性質

  • カタロイド曲面は、鎖線の形状をしており、そのため鎖線曲面とも呼ばれます。
  • この曲面は、最小曲面の一種であり、曲面の面積が最小になる性質を持っています。
  • カタロイド曲面は、石けんの膜の形状として知られており、物理学工学の分野で重要な役割を果たしています。

4. 応用

  • カタロイド曲面の形状は、建築物の設計構造物の強度計算などに応用されています。
  • また、流体力学の分野では、液体の表面張力によって生じる形状としてカタロイド曲面が研究されています。

カタロイド曲面は、特異な形状と数学的な性質を併せ持つ曲面であり、様々な分野で興味深い応用があります。

この曲面の理解は、曲面の幾何学的な性質を学ぶ上で重要です。

ソースコード

カタロイド曲面の方程式は以下のように表されます。

$$
x^2 + y^2 - (x^2 + y^2)^2 = 0
$$

この方程式をPythonで解いて、グラフ化するコードは次のようになります。

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

# カタロイド曲面の方程式
def catenoid(x, y):
return x**2 + y**2 - (x**2 + y**2)**2

# グラフ化する範囲
x = np.linspace(-2, 2, 50)
y = np.linspace(-2, 2, 50)

X, Y = np.meshgrid(x, y)
Z = catenoid(X, Y)

# 3D図を描画
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis')
ax.set_title('Catenoid Surface')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

このコードでは、最初にカタロイド曲面の方程式を関数catenoid(x, y)として定義しています。

次に、グラフ化する範囲をnp.linspace関数で設定し、np.meshgrid関数を使ってグリッド点を生成しています。

catenoid(X, Y)で方程式の値を計算し、ax.plot_surface関数で3D曲面を描画しています。
rstridecstride表示解像度を調整できます。
cmapカラーマップを指定しています。

最後に、グラフにタイトルとラベルを付けて、plt.show()でグラフを表示しています。

実行すると、カタロイド曲面3D グラフが表示されます。

[実行結果]

ソースコード解説

コードの構成は以下の通りです。

1. ライブラリのインポート

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

NumPyMatplotlibライブラリをインポートしています。
NumPyは数値計算、Matplotlibは図の描画に使用されます。
さらに、Matplotlibの3D プロットを行うためにAxes3Dモジュールをインポートしています。

2. 方程式の定義

1
2
def catenoid(x, y):
return x**2 + y**2 - (x**2 + y**2)**2

カタロイド曲面の方程式 $x^2 + y^2 - (x^2 + y^2)^2 = 0$ を関数 catenoid(x, y) として定義しています。

この関数は、入力された xy の値に対応する z の値を返します。

3. グラフ化する範囲の設定

1
2
3
4
x = np.linspace(-2, 2, 50)
y = np.linspace(-2, 2, 50)
X, Y = np.meshgrid(x, y)
Z = catenoid(X, Y)

np.linspace(-2, 2, 50) で、$-2$から$2$までの$50$個の点を等間隔で生成しています。

これにより、グラフ化する xy の範囲が設定されます。

次に、np.meshgrid(x, y)XY の座標グリッドを作成しています。

最後に、catenoid(X, Y)XY に対応する Z の値を計算しています。

4. 3D グラフの描画

1
2
3
4
5
6
7
8
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis')
ax.set_title('Catenoid Surface')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

最初に plt.figure() で新しい図のウィンドウを作成し、fig.add_subplot(111, projection='3d') で3D プロットの領域を確保しています。

次に、ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis') でカタロイド曲面を描画しています。

rstridecstride描画解像度を、cmapカラーマップを設定しています。

最後に、ax.set_title()ax.set_xlabel()ax.set_ylabel()ax.set_zlabel() でグラフのタイトルと軸ラベルを設定し、plt.show() でグラフを表示しています。


このスクリプトを実行すると、カタロイド曲面の3D グラフがウィンドウに表示されます。

グラフには曲面の特徴的な形状と高さに応じた色分けがなされています。

グラフ解説

[実行結果]

グラフには以下の特徴があります。

  • カタロイド曲面は、2つの円すい面が共有する部分から成る曲面です。
  • 曲面の中心部分には穴が開いた形状になっています。
  • 曲面の高さは中心から離れるほど低くなっていきます。
  • 曲面の色は高さに応じて変化しており、濃い色が高い部分、薄い色が低い部分を表しています。

このようにカタロイド曲面のグラフは、特徴的な形状と色分けされた高さの変化を視覚的に捉えることができます。

モンゴメリー曲面

モンゴメリー曲面

モンゴメリー曲面方程式は、特殊な3次元曲面を表す方程式です。
この曲面は、数学者ゲオルク・モンゴメリーにちなんで名付けられました。

この方程式は以下のように表されます:

$$
z^2 = x^2 + y^2 + \frac{a^2}{4} - \frac{a}{2} \sqrt{x^2 + y^2}
$$

この方程式にはいくつかの特徴があります:

  1. $ (x)$、$(y)$、$(z) $は、3次元空間内の点の座標を表します。
    曲面上の点の位置を定義します。
  2. $(a) $は定数であり、曲面の形状を制御します。
    $(a) $の値が異なると、曲面の形状も変化します。
  3. 方程式の右辺は、$(x) $と$ (y) $の座標によって決まる項と定数項からなります。
    これらの項は曲面の形状を定義します。
  4. 方程式の左辺は$ (z) $の二乗であり、曲面上の点の$ (z) $座標を表します。
    この部分が右辺の式によって決定されます。

モンゴメリー曲面は、円錐楕円錐の特徴を持ち、特殊な形状を示します。

この曲面は、幾何学数学の研究で興味深い対象として扱われています。

その形状や性質は、さまざまな数学的な問題や応用において重要な役割を果たしています。

ソースコード

この方程式をグラフ化するために、NumPyMatplotlibを使用します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# モンゴメリー曲面方程式
def montgomery_surface(x, y, a):
z = np.sqrt(x**2 + y**2 + a**2/4 - a/2 * np.sqrt(x**2 + y**2))
return z

# x, y 座標の範囲
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)

# 定数 a の値
a = 1

# モンゴメリー曲面の z 座標を計算
Z = montgomery_surface(X, Y, a)

# グラフ化
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis')

# 軸ラベル
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# タイトル
plt.title('Montgomery Surface (a = 1)')

# グラフ表示
plt.show()

このコードは、モンゴメリー曲面の方程式を解いて、3Dグラフとして表示します。

a の値を変えることで、異なる形状の曲面を表示することができます。

[実行結果]

ソースコード解説

以下に、ソースコードの詳細な説明を示します。

1. ライブラリのインポート

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
  • numpy は数値計算を行うためのライブラリであり、数値配列や数学関数を提供します。
  • matplotlib.pyplot はグラフ描画のためのライブラリであり、2次元のグラフやプロットを作成します。
  • mpl_toolkits.mplot3d は3次元のグラフを描画するためのツールキットです。

2. モンゴメリー曲面方程式の定義

1
2
3
def montgomery_surface(x, y, a):
z = np.sqrt(x**2 + y**2 + a**2/4 - a/2 * np.sqrt(x**2 + y**2))
return z
  • montgomery_surface 関数は、与えられた $(x)$、$(y) $座標と定数$ (a) $に基づいて、モンゴメリー曲面の$ (z) $座標を計算します。

3. $(x) $と$ (y) $座標の範囲の設定

1
2
3
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
  • np.linspace 関数を使用して、$-5 $から$ 5 $までの範囲を等間隔で$100$個の点に分割した$ (x)$、$(y) $座標を生成します。
  • np.meshgrid 関数は、これらの$ (x)$、$(y) $座標の組み合わせを作成します。

4. 定数 (a) の値の設定

1
a = 1
  • 定数$ (a) $の値を$ 1 $に設定します。

5. モンゴメリー曲面の$ (z) $座標の計算

1
Z = montgomery_surface(X, Y, a)
  • montgomery_surface 関数を使用して、各$ (x)$、$(y) $座標に対応する$ (z) $座標を計算します。

6. グラフ化

1
2
3
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis')
  • plt.figure() 関数を使用して新しい図を作成します。
  • fig.add_subplot(111, projection='3d') は、3次元のサブプロットを追加します。
  • ax.plot_surface(X, Y, Z, cmap='viridis') は、$(x)$、$(y)$、$(z) $座標の曲面をプロットします。

7. 軸ラベルとタイトルの設定

1
2
3
4
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.title('Montgomery Surface (a = 1)')
  • ax.set_xlabelax.set_ylabelax.set_zlabel で、それぞれの軸にラベルを設定します。
  • plt.title でグラフのタイトルを設定します。

8. グラフの表示

1
plt.show()
  • plt.show() で、グラフを表示します。

グラフ解説

[実行結果]

  • プロットされた曲面は、モンゴメリー曲面を表しています。
  • 曲面の形状は、$(a) $の値によって変化します。
    $(a) $の値が大きいほど、曲面の形状が変化します。
  • $x$, $y$, $z$軸にはそれぞれ座標軸が表示されています。
  • グラフのタイトルは、Montgomery Surface (a = 1) となっており、$(a) $の値が$1$である場合の曲面を表示しています。

このプログラムを実行することで、モンゴメリー曲面の形状を視覚的に理解することができます。

モビウス帯方程式

モビウス帯方程式

モビウス帯方程式は、三次元空間内に特殊な帯状の曲面を定義するための方程式です。

モビウス帯は、帯状の面が一度だけねじれている特殊な形状を持つことで知られています。

モビウス帯方程式は以下のように表されます:

$$
x = (1 + \frac{v}{2} \cos(\frac{u}{2})) \cos(u)
$$
$$
y = (1 + \frac{v}{2} \cos(\frac{u}{2})) \sin(u)
$$
$$
z = \frac{v}{2} \sin(\frac{u}{2})
$$

ここで、$( u ) $と$ ( v ) $はパラメータであり、それぞれ帯の周りの角度帯の幅を表します。
これらのパラメータによって、曲面上の各点の座標$ (x, y, z) $が計算されます。

この方程式によって定義されるモビウス帯は、その特異な形状から幾何学数学の興味深いトピックとなっています。

また、この帯の特性は、科学工学の様々な分野で興味深い応用が見られます。

ソースコード

Pythonでこれを解いてグラフ化するには、Matplotlibを使用します。

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

# パラメータの範囲
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(-1, 1, 100)
U, V = np.meshgrid(u, v)

# モビウス帯方程式の解
x = (1 + V/2 * np.cos(U/2)) * np.cos(U)
y = (1 + V/2 * np.cos(U/2)) * np.sin(U)
z = V/2 * np.sin(U/2)

# 3Dプロット
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis')

# 軸ラベルの設定
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# グラフの表示
plt.show()

このコードでは、指定されたパラメータ範囲内で$ ( x )$、$( y )$、$( z ) $の値を計算し、それを3Dプロットとして描画しています。

[実行結果]

ソースコード解説

ソースコードの各部分を説明します。

ライブラリのインポート

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
  • numpy:数値計算ライブラリ。
    多次元配列や行列演算などを提供する。
  • matplotlib.pyplot:グラフ描画ライブラリ。
    2次元プロットや3次元プロットを描画するために使用される。
  • mpl_toolkits.mplot3d.Axes3D:3次元プロットのためのサブモジュール。

パラメータの範囲の設定

1
2
3
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(-1, 1, 100)
U, V = np.meshgrid(u, v)
  • u:パラメータ$ ( u ) $の範囲を設定。
    $0$から$ ( 2\pi ) $までの範囲を$100$個の等間隔に区切る。
  • v:パラメータ$ ( v ) $の範囲を設定。
    $-1$から$1$までの範囲を$100$個の等間隔に区切る。
  • np.meshgrid(u, v):パラメータ$ ( u ) $と$ ( v ) $を組み合わせたメッシュグリッドを作成する。

モビウス帯方程式の解の計算

1
2
3
x = (1 + V/2 * np.cos(U/2)) * np.cos(U)
y = (1 + V/2 * np.cos(U/2)) * np.sin(U)
z = V/2 * np.sin(U/2)
  • モビウス帯方程式から$ ( x )$、$( y )$、$( z ) $の座標を計算する。

3Dプロットの設定

1
2
3
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis')
  • 3Dプロットを描画するための設定を行う。
  • fig:新しいFigureオブジェクトを作成。
  • ax:3Dサブプロットを作成し、現在のFigureに追加。
  • ax.plot_surface(x, y, z, cmap='viridis')モビウス帯の表面をプロットする。

軸ラベルの設定

1
2
3
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
  • 軸ラベルを設定する。

グラフの表示

1
plt.show()
  • 設定したグラフを表示する。

グラフ解説

[実行結果]

このグラフは、モビウス帯を表現しています。
モビウス帯は特殊な形状であり、帯状の面が一度だけねじれているものです。
具体的には、帯の中心を一周しても片側だけが反転するという特性を持っています。

このグラフでは、三次元空間内にモビウス帯が描かれています。
各点はパラメータ$ ( u ) $と$ ( v ) $によって定義され、それに対応する$ ( x )$、$( y )$、$( z ) $座標が計算されています。

  • $( x )$、$( y )$、$( z ) $軸はそれぞれ三次元空間内の座標を表します。
  • 曲面は帯状であり、一見すると通常の帯のように見えますが、実際には一周してねじれていることが分かります。
  • 曲面の色は ‘viridis’ カラーマップに基づいて決定され、高さや深さを視覚的に表現しています。

このグラフは、モビウス帯の特徴を視覚的に理解するのに役立ちます。