3次元の回転行列:座標軸まわりの回転
目次
前提知識
この記事をスムーズにご理解いただくために、以下の知識があることが望ましいです。
- 3次元のベクトルと座標系
- 三角関数
- 行列の積
- 2次元の回転行列
要点まとめ
この記事では3次元空間におけるベクトルの回転について解説し、各座標軸まわりの基本的な回転行列を導出します。
- 問題の核心: 3次元空間での回転操作を、行列の積という線形変換で表現すること。3次元では回転軸の指定が不可欠となる。
- 用いる数学的道具: 2次元回転行列の考え方と、座標軸の巡回置換。
- 最終的な結論: x, y, z軸まわりの回転行列 $R_x(\theta), R_y(\theta), R_z(\theta)$ を導出し、これらの積によって任意の回転を表現できること。
1. はじめに
3次元の回転は物理学や工学の様々な分野で中心的な役割を果たします。剛体の力学、航空宇宙工学における姿勢制御、ロボットアームの運動、コンピュータグラフィックスにおける3Dモデルの操作など、その応用範囲は枚挙にいとまがありません。
3次元回転の大きな特徴は、「どの軸を中心に回転するか」を常に意識する必要がある点です。この記事では、最も基本となるx, y, zの各座標軸まわりの回転を行列で表現する方法を導出し、それらを組み合わせることで、より一般的な回転をどのように記述できるのかを解説します。
2. 問題設定
3次元デカルト座標系 $(x, y, z)$ において、ある位置ベクトル $\vec{p} = (p_x, p_y, p_z)^T$ を考えます。このベクトルを、原点を通る特定の軸のまわりに角 $\theta$ だけ回転させた後のベクトルを $\vec{p}’ = (p’_x, p’_y, p’_z)^T$ とします。
本記事の目標は、以下の3つの基本的な回転操作に対応する行列 $R_x(\theta), R_y(\theta), R_z(\theta)$ を導出することです。
- z軸まわりの回転
- x軸まわりの回転
- y軸まわりの回転
回転の向きは、各軸の正の方向から原点を見たときに反時計回りを正とします(右ねじの法則)。
3. 解法のロードマップ
3次元の回転行列を体系的に導出するために、以下のステップで思考を進めます。
Step 1: 2次元回転行列の導出(加法定理) まず基礎として、xy平面上での回転操作を行列で表現します。ベクトルの極座標表示と三角関数の加法定理を用いて、2次元の回転行列を厳密に導出します。
Step 2: z軸まわりの3次元回転行列 $R_z(\theta)$ の導出 Step 1で導出した2次元回転行列を利用し、3次元空間におけるz軸まわりの回転を考えます。z座標が不変であることに着目し、3x3行列へと拡張します。
Step 3: 座標軸の巡回置換 ($x \to y \to z \to x$) の考え方を用いて、x軸まわりの回転行列 $R_x(\theta)$ を導出する。
Step 4: 同様に、y軸まわりの回転行列 $R_y(\theta)$ を導出する。
Step 5: これらの基本的な行列を組み合わせることで、任意の回転を表現する方法(オイラー角)について概説する。
4. 理論展開と計算
Step 1: 2次元回転行列の導出(加法定理)
3次元回転を理解する礎として、まずxy平面上のベクトルの回転を行列で表現します。
xy平面上の点 $(p_x, p_y)$ を考えます。この点の原点からの距離を $r$、x軸の正の向きとなす角を $\alpha$ とすると、次のように表現できます。 $$ \begin{aligned} p_x &= r \cos\alpha \\ p_y &= r \sin\alpha \end{aligned} $$
この点を原点まわりに角 $\theta$ だけ回転させた後の点 $(p’_x, p’_y)$ の座標は、原点からの距離は変わらず $r$ のままで、角度が $\alpha + \theta$ となります。 $$ \begin{aligned} p’_x &= r \cos(\alpha + \theta) \\ p’_y &= r \sin(\alpha + \theta) \end{aligned} $$
ここで三角関数の加法定理 $\cos(A+B) = \cos A \cos B - \sin A \sin B$ と $\sin(A+B) = \sin A \cos B + \cos A \sin B$ を用いて式を展開します。
$$
\begin{aligned}
p’_x &= r (\cos\alpha \cos\theta - \sin\alpha \sin\theta) = (r \cos\alpha) \cos\theta - (r \sin\alpha) \sin\theta \\
p’_y &= r (\sin\alpha \cos\theta + \cos\alpha \sin\theta) = (r \sin\alpha) \cos\theta + (r \cos\alpha) \sin\theta
\end{aligned}
$$
この式に、$p_x = r \cos\alpha$ と $p_y = r \sin\alpha$ の関係を代入して整理すると、 $$ \begin{aligned} p’_x &= p_x \cos\theta - p_y \sin\theta \\ p’_y &= p_x \sin\theta + p_y \cos\theta \end{aligned} $$という関係式が導かれます。これを行列とベクトルの積の形で表現すると、2次元の回転行列が得られます。
$$\begin{pmatrix} p’_x \\ p’_y \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix} \begin{pmatrix} p_x \\ p_y \end{pmatrix}$$
Step 2: z軸まわりの3次元回転行列 $R_z(\theta)$ の導出
次に、この2次元の回転を3次元空間に拡張し、z軸まわりの回転を考えます。
ベクトル $\vec{p} = (p_x, p_y, p_z)^T$ をz軸まわりに回転させるとき、ベクトルの先端はz軸に垂直な平面上を移動します。これは、z成分の値が変化しないことを意味します。 $$p’_z = p_z$$ 一方で、$p_x, p_y$ 成分の変化は、xy平面上での回転そのものです。したがって、Step 1で導出した2次元回転行列の結果をそのまま適用できます。
これらを合わせると、3次元空間におけるz軸まわりの回転は次のように表現できます。 $$\begin{pmatrix} p’_x \\ p’_y \\ p’_z \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} p_x \\ p_y \\ p_z \end{pmatrix}$$ よって、z軸まわりの回転行列 $R_z(\theta)$ は以下となります。 $$R_z(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix}$$
Step 3: x軸まわりの回転行列 $R_x(\theta)$ の導出
x軸まわりの回転では、$p_x$ 成分が不変 ($p’_x = p_x$) であり、回転はyz平面上で起こります。これは、Step 2のz軸まわりの回転における変数 $(x, y, z)$ を $(y, z, x)$ と読み替える巡回置換の考え方を適用することで、機械的に導出できます。
yz平面での回転は、xy平面での回転で $x \to y, y \to z$ と置き換えることで、 $$ \begin{aligned} p’_y &= p_y \cos\theta - p_z \sin\theta \\ p’_z &= p_y \sin\theta + p_z \cos\theta \end{aligned} $$と書けます。これと $p’_x = p_x$ を合わせると、x軸まわりの回転行列 $R_x(\theta)$ が得られます。$$ R_x(\theta) = \begin{pmatrix} 1 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta \\ 0 & \sin\theta & \cos\theta \end{pmatrix} $$
Step 4: y軸まわりの回転行列 $R_y(\theta)$ の導出
同様に、y軸まわりの回転では $p_y$ 成分が不変 ($p’_y = p_y$) で、zx平面(またはxz平面)上で回転が起こります。変数の読み替えは $z \to x, x \to y, y \to z$ の巡回から $x \to z, y \to x$ となります。 $$ \begin{aligned} p’_z &= p_z \cos\theta - p_x \sin\theta \\ p’_x &= p_z \sin\theta + p_x \cos\theta \end{aligned} $$これを $p’_x, p’_y, p’_z$ の順に整理し直すと、$$ \begin{aligned} p’_x &= (\cos\theta)p_x + (\sin\theta)p_z \\ p’_y &= p_y \\ p’_z &= (-\sin\theta)p_x + (\cos\theta)p_z \end{aligned} $$となり、y軸まわりの回転行列 $R_y(\theta)$ が得られます。(符号の位置が他の行列と異なる点に注意してください)$$ R_y(\theta) = \begin{pmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{pmatrix} $$
【補足】y軸まわりの回転行列の符号について
なぜ$R_y(\theta)$だけ$\sin\theta$の符号の位置が他と異なるのか、と疑問に思うかもしれません。これは、座標系が右手系 $(\vec{e}_x, \vec{e}_y, \vec{e}_z)$ を維持するように回転を定義しているためです。z軸まわりの回転ではx軸からy軸へ、x軸まわりの回転ではy軸からz軸へと向かうのが「正」の回転ですが、y軸まわりの回転ではz軸からx軸へと向かうのが「正」の回転となります。この軸の順番の違いが、符号の配置に反映されています。
5. 結論と物理的考察
以上の計算から、3次元空間における各座標軸まわりの回転行列は以下のように与えられます。
$$ R_x(\theta) = \begin{pmatrix} 1 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta \\ 0 & \sin\theta & \cos\theta \end{pmatrix} \quad R_y(\theta) = \begin{pmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{pmatrix} \quad R_z(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} $$
これらの行列の行列式はいずれも +1 であり、回転が体積と向き(右手系・左手系)を保存する変換であることを示しています。
3次元回転の最も重要な性質の一つに、**操作の順番を入れ替えると結果が変わる(非可換である)**という点があります。例えば、物体を「まずx軸まわりに90度、次にy軸まわりに90度」回転させるのと、「まずy軸まわりに90度、次にx軸まわりに90度」回転させるのでは、最終的な物体の向きは異なります。これは行列の積が非可換であること ($R_x(\theta_1)R_y(\theta_2) \neq R_y(\theta_2)R_x(\theta_1)$) に対応しており、2次元回転との決定的な違いです。
6. 発展と関連テーマ
- オイラー角: 任意の向きの回転は、これらの基本回転を3回組み合わせることで表現できます。例えば、「z軸まわりに角 $\phi$ → 新たなy軸まわりに角 $\theta$ → 新たなz軸まわりに角 $\psi$」のように、回転の組み合わせ方を定義したものがオイラー角です。これにより、剛体の姿勢などを3つの角度で指定できます。この回転順序の重要性(非可換性)は、$R_x(\frac{\pi}{2})R_y(\frac{\pi}{2})$ と $R_y(\frac{\pi}{2})R_x(\frac{\pi}{2})$ のような具体的な行列計算を行ったり、ルービックキューブのような身近な物体を実際に回転させたりすることで直感的に確認できます。
- 軸と角度による表現(ロドリゲスの回転公式): 任意の単位ベクトル $\vec{n}$ を回転軸として、そのまわりに角 $\theta$ だけ回転させる一般の回転行列は、ロドリゲスの回転公式によって与えられます。これはオイラー角よりも直感的で、特定の場合に発生する問題(ジンバルロック)を回避できます。
- 四元数(クォータニオン): 3次元の回転を表現する、より洗練された数学的ツールとして四元数があります。4つの実数の組で回転を表現し、計算が効率的であるため、特にコンピュータグラフィックスや航空宇宙分野で広く利用されています。