曲線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測地線です。