3Dタートルでの実験
回転軸と回転方向 - 檜山正幸のキマイラ飼育記 メモ編 からの続き。
次のURLは、ブラウザ上で動かせる3Dタートルグラフィックスである。
タートルは亀のこと。亀型の飛行機/宇宙船を操縦すると思えばいい。あるいは海亀になったとイメージして、海中を泳ぐことを想像してもよい。操縦士や海亀になりきって、体感と共に操作する。
Terminalに亀を動かすコマンドを入力していけば、右の3D環境内の亀が動く。右の描画領域内でマウスを動かすとカメラ位置を変えることができる。いろいろな視点から眺めることができる。
コマンドは次のとおり。
亀を動かす
位置を変える
- goto(x, y, x): 座標が (x, y, z) である位置にジャンプする。
- move(r): 距離rだけ直進する。rが負の数ならバックで移動。
向きを変える
- turn(d): 左右の向きを変える。dは角度。
- pitch(d): 上下の向きを変える。dは角度。
- roll(d): 体を傾ける。dは角度。
状態を変える
亀の状態を変える
- hide(): 亀を隠す。
- show(): 亀を見せる。
- penup(): ペンを上げる(線を描かない状態にする)。
- pendown(): ペンを下げる(線を描く状態にする)。
亀とキャンバスの状態を変える
- reset(): 亀とキャンバスを初期状態に戻す。
飛行機との対応で言うと:
- turnコマンド: ヨーイングする
- pitchコマンド: ピッチングする
- rollコマンド: ローリングする
yawじゃなくてturnだが、pitch, rollは言葉も同じ。
最初に座標系を試行錯誤で調べる。
- 原点はどこにあるか?
- x軸はどの方向か?
- y軸はどの方向か?
- z軸はどの方向か?
- この座標系は右手系か左手系か?
- 座標の長さの単位はどのくらいか?
- 床(緑)と壁(青)で囲まれた箱を「亀の部屋」と呼ぶことにすると、亀の部屋の寸法はどのくらいか。
- 亀が、亀の部屋から飛び出すとどうなるか?
3D空間内での位置と移動に慣れる。
以下、使うコマンドは、move, turn, gotoだけ。
- 必要ならresetして、(0, 0, 0)→(5, 0, 0)→(5, 5, 0) という経路を描け(カギ型になるはず)。
- 原点にgotoしてから、(0, 0, 0)→(5, 5, 0) という経路を描け(1本の線分)。
- 原点にgotoしてから、(0, 0, 0)→(0, 5, 0)→(5, 5, 0) という経路を描け(別なカギ型になるはず)。
ヒントとコツ: コマンドの引数に計算式やJavaScript関数呼び出しが使える。move(2*1.5 + 1/4) とか turn((Math.PI / 4)*(180 / Math.PI)) がOK。平方根はMath.sqrt()関数、三角関数はMath.cos(), Math.sin(), Math.tan()、逆三角関数はMath.asin(), Math.acos(), Math.atan()。亀が邪魔ならhide()コマンドで消してみる。
以下、使うコマンドは、move, turn, pitch, gotoだけ。
- resetして、(0, 0, 0)→(5, 0, 0)→(5, 5, 0)→(5, 5, 5) という経路を描け。
- 原点にgotoしてから、(0, 0, 0)→(5, 5, 0)→(5, 5, 5) という経路を描け。
- 原点にgotoしてから、(0, 0, 0)→(5, 5, 5) という経路を描け。
- 原点にgotoしてから、(0, 0, 0)→(0, 5, 5)→(5, 5, 5) という経路を描け。
- 原点にgotoしてから、(0, 0, 0)→(0, 0, 5)→(5, 5, 5) という経路を描け。
以下、使うコマンドは、move, turn, pitch, gotoだけ。
- resetして、(0, 0, 0)→(5, 0, 0)→(5, 5, 0)→(8, 5, 0)→(8, 7, 0) という経路を描け。
- 原点にgotoしてから、(0, 0, 0)→(5, 0, 0)→(5, 5, 0)→(8, 7, 0) という経路を描け。
- 原点にgotoしてから、(0, 0, 0)→(5, 5, 0)→(8, 5, 0)→(8, 7, 0) という経路を描け。
- 原点にgotoしてから、(0, 0, 0)→(5, 5, 0)→(8, 7, 0) という経路を描け。
- 原点にgotoしてから、(0, 0, 0)→(8, 7, 0) という経路を描け。