タイトル通りです。
基本となる式は
です。これを満たす は下記のように表せます。
また、複素数なので下記のように表すこともできます。
このとき は以下のとおりです。
下記の操作によって三次元空間での様子を可視化します。
検証⓪ が固定 が連続の場合
とします。
プログラム
eta = pi/10 u,v=var('u,v') parametric_plot3d((lambda u,v:sin((u+v)/2)*sin(eta)/(1-cos((u+v)/2)*sin(eta)), lambda u,v:cos((u-v)/2)*cos(eta)/(1-cos((u+v)/2)*sin(eta)), lambda u,v:sin((u-v)/2)*cos(eta)/(1-cos((u+v)/2)*sin(eta))), (u, 0, 4*pi), (v, 0, 2*pi))
実行結果
検証① が連続 が離散値をとる場合
検証⓪と同様に とします。
プログラム
eta = pi/10 vs = [pi*i/36 for i in range(72)] p = [parametric_plot3d((lambda u:sin((u+v)/2)*sin(eta)/(1-cos((u+v)/2)*sin(eta)), lambda u:cos((u-v)/2)*cos(eta)/(1-cos((u+v)/2)*sin(eta)), lambda u:sin((u-v)/2)*cos(eta)/(1-cos((u+v)/2)*sin(eta))), (u, 0, 4*pi)) for v in vs] sum(p)
実行結果
検証② が連続 が離散をとる場合
重なるとわかりにくいので の値で色分けします。
プログラム
p = [] n = 5 colors = ['yellow','blue','green','red','purple'] for k in range(n): eta = pi*k/10 p.extend([parametric_plot3d( (lambda u:sin((u+v)/2)*sin(eta)/(1-cos((u+v)/2)*sin(eta)), lambda u:cos((u-v)/2)*cos(eta)/(1-cos((u+v)/2)*sin(eta)), lambda u:sin((u-v)/2)*cos(eta)/(1-cos((u+v)/2)*sin(eta))), (u, 0, 4*pi), color=colors[k%n], plot_points=200) for v in vs]) sum(p)
実行結果
なんかそれっぽいものができます。
拡大してみると黄色の円()が見えます。
さて、とりあえず本稿の目標は達成しました。Hopf fibration については今後も調べて記事にしていこうと思います。
参考
Hopf fibration
- https://en.wikipedia.org/wiki/Hopf_fibration
- https://ja.wikipedia.org/wiki/%E4%B8%89%E6%AC%A1%E5%85%83%E7%90%83%E9%9D%A2
- https://nilesjohnson.net/hopf-articles/Lyons_Elem-intro-Hopf-fibration.pdf
- http://www.dimensions-math.org/Dim_CH7_JP.htm
- http://new.math.uiuc.edu/math198/MA198-2012/klobuch2/AMyHTML/Pages/Project/FinalPresentation.pdf