3D の回転と回転体

第3章 No.2 / x, y, z 軸まわりの回転を組み合わせる

つぎに 3 次元の座標で考えよう。3 次元の回転は、2 次元の座標平面を x 軸まわり (y-z 平面)y 軸まわり (z-x 平面)z 軸まわり (x-y 平面) に分けて考えればよい。

x 軸まわり (α ラジアン)

x2 = x1
y2 = y1 cos α − z1 sin α
z2 = y1 sin α + z1 cos α

y 軸まわり (β ラジアン)

x3 = x2 cos β + z2 sin β
y3 = y2
z3 = −x2 sin β + z2 cos β

z 軸まわり (γ ラジアン)

x4 = x3 cos γ − y3 sin γ
y4 = x3 sin γ + y3 cos γ
z4 = z3

このように回転した点を、例えば平面 z = 0 に 平行投影 した図形を画面に表示させればよい (画面は 2 次元である)。平行投影では、無限遠のかなたから人間がみていると考えれば、その図形に歪みはなく簡単に考えることができる。つまり、単に z 座標を忘れて、x, y 座標だけを使って画面に描けばよい。

これで準備が整った!

そして、表示するものを 「回転体」 としよう。回転体も同じように、これらの概念を使ってデータを計算することができる。例えば、z-x 平面に書かれた点の座標を使って z 軸に回転した回転体を考える。これを x-y 平面に平行投影して表示してみると:

Sample 2 — x-y 平面への平行投影JS

さらに、x-z 平面に平行投影して表示してみると、以下のようになる。

Sample 3 — x-z 平面への平行投影JS

この回転体がひっくりかえって見えるのは、数学で示す座標が下から上に向かって増加するのに対して、プログラムで表す座標が上から下に向かって増加するためである。もちろん、プログラムを修正することによりそれらを同じにすることができるが、ここではあえて素直にプログラミングしてみた。

ソースコードは samples.jsSoR 部分にまとまっている。