Google ClassroomGoogle Classroom
GeoGebraGeoGebra Classroom

曲線6(トーラスの3D測地線)

このページはマス旅の一部です。 今回も「測地線(曲面上の最短経路)」がテーマです。 アリさんは今度、球やトーラス(ドーナツ型)の表面を「まっすぐ」進みます。

1. 球面の測地線は大円、トーラスの測地線は何?

課題:球面およびトーラスの測地線を3D空間に描くアプリ 3D空間で球やトーラスの上を縦横無尽に巻きつく測地線をビジュアル化します。
2.ウォーミングアップ <球の測地線> 北半球をかきます。 北極をN、半径をr、赤道面の円の中心をOとします。 出発点をA(r,0,0), ゴールをBはAから東に90度、北に60度の地点です。 BはNから見ると、Aよりもπ/2先です。x=0 BはAから見ると、Aよりもπ/3上です。y=r/2, z=√3/2 * r B=(0, r/2, √3/2 * r)ですね。 OについてAと対称な点をCとすると、C=(-r,0,0)となる。Bと対称な点Dは(0,-r/2,-√3/2 * r) だから、AからBへの測地線上の点をPとすると点PはA,B,C,Dを通る大円にある。 この大円を赤道面に正射影してみよう。 大円のz座標が0になるだけだ。B'=(0, r/2,0),D'=(0,-r/2,0)となる。 大円の正射影はy軸方向に1/2に縮めた楕円だとわかる。 だから点Pの正射影P'もこの楕円上にくるはずだ。 中心OとPを結び赤道まで伸ばした点をQとしよう。 点Qを(rcost, rsint)で動かすと、OPはy=tan(t) xの直線となり楕円と交わる。 その交点をRとすると、1/(1/2)=2から x^2+(2y)^2=1となり、(1+4tan^2(t))=1/x^2。xが正だから、x=1/√(1+4tan^2(t))。 y=tan(t)/√(1+4tan^2(t))。つまり、直線OQの傾きをm=tan(t)とすると、 (x,y)=(1/√(1+4m^2), m/√(1+4m^2))となるね。 PはAから見ると、Aよりπ/3上にあるからz=√3 y Pの座標はAから東にt進むと、m=tan(t)、n=1/√(1+4m^2)とおくと、P=(n,mn,√3mn)となるね。

3.トーラスの測地線

<トーラスの基本> トーラスを閉じたゴム管にたとえます。 管が点Oの周りを1周して戻るまでの中心線Cが大半径Rの大円(longitude) 管自体の断面の円の小半径rの小円(meridian) OC=Rですが管の太さから、上から見てOからの距離は最大R+r、最小でR-rですね。 ゴム管の任意の点Pは垂直にみると、「半径rの小円でt」進んだ点なら 水平座標はrcos(t),垂直座標はV=rsin(t)となります。垂直座標がそのままz=rsin(t)です。 それを上から見ると、中心Oからの距離が H= R+rcos(t)。 だから、H-R=rcos(t),z=rsin(t)がセット。 ゴム管を穴の「中心Oについて大円でf」進んで回る位置で測ると、 半径Hの円をx軸、y軸に投影するから、x=Hcos(f),y=Hsin(f)のセットができるね。 これをまとめたのがパラメータ表示だ。パラメータt と f(0 ≤ t, f < 2π)表示。 x = (R + r cos(t)) cos(f)) y = (R + r cos(t)) sin(f)) z = r sin(t) (x,y)は半径Hの円から、 x^2 + y^2 = H^2 また、(H -R,z)は半径rの円となるから、 (H-R)^2 + z^2= r^2 これから、Hを消去したのがx,y,zの式ですね。 ((√(x^2 + y^2) - R)^2 + z^2 = r^2 <トーラスの測地線> トーラス」は「2パラメータでできた多様体」という図形でした。 たとえば、多様体としての(t,f)(0 ≤ t, f < 2π)はただの「長方形」です。 f=0にして、tだけ動かすと長方形の「よこ線」だけになります。 t=0にして、fだけ動かすと長方形の「たて線」になりますね。 t=fにして動かすと、「長方形の対角線」ができます。 t=2fにして、tの回転を2倍にすると「2回横切る線分」ができて、トーラスを2周します。 こうしてかんがえると、......。 tとfのパラメータを1つにして、 それぞれのスピードを変化させればよいことがわかりますね。だから、m,nを0以上の整数にする。 パラメータをkで0以上2*pi未満で動かし、tg = m *k,fg = n*kとします。 事実上ワンパラメータの曲線になりました。 xg = (R + r cos(tg)) cos(fg)) yg = (R + r cos(tg)) sin(fg)) zg = r sin(tg) これで、測地線を量産できそうです。

4.コード化

<geogebra> // ========================================== // 1. 定数とスライダーの定義 // ========================================== // 大半径 R, 小半径 r R = 2 r = 1 // トーラス本体(曲面) torus = Surface((R + r*cos(t))*cos(f), (R + r*cos(t))*sin(f), r*sin(t), t, 0, 2*pi, f, 0, 2*pi) // 巻き数スライダー m (小円方向の回転数), n (大円方向の回転数) m = Slider(0, 5, 1) n = Slider(0, 5, 1) // ========================================== // 2. 測地線(トーラス上の1パラメータ曲線) // ========================================== // Curveコマンドを使用して3D空間内の測地線を描画します geodesic = Curve((R + r*cos(m * k))*cos(n * k), (R + r*cos(m * k))*sin(n * k), r*sin(m * k), k, 0, 2*pi) // アニメーション用スライダー (0 ~ 2π) k= Slider(0, 2*pi, 0.05) // 測地線上を動くアリさん(動点P) P = ((R + r*cos(m * k))*cos(n * k), (R + r*cos(m * k))*sin(n * k), r*sin(m * k)) // ========================================== // 3. 2Dグラフィックビュー用テキスト // ========================================== text1 = "小円の巻き数 m = " + m text2 = "大円の回転数 n = " + n text3 = "展開図の直線\\ (t = m*k, f = n*k) が3D測地線です。

トーラス上の測地線を変える