← 返回目錄首頁 📂 NCUT-G102/G102_1013_Quiz_Gemini.html
🔄 快速切換網頁:
✦ 贊助商廣告 / SPONSORED ✦

3D 任意軸旋轉變換演算法

Computer Graphics: Basis Alignment Method (Goldman / RTR)

課堂白板題目對應

題目給定條件與待求清單

給定旋轉軸向量 (Axis)
$$\mathbf{r} = [1, 2, 3]$$
給定旋轉角度 (Angle)
$$\alpha = 1.5 \text{ radians} \ (\approx 85.94^{\circ})$$
待求解 5 大項目
  • (1) 正交單位向量 $\mathbf{s}$ 待求
  • (2) 外積單位向量 $\mathbf{t} = \mathbf{r} \times \mathbf{s}$ 待求
  • (3) 基底旋轉矩陣 $\mathbf{M}$ 待求
  • (4) 轉置矩陣 $\mathbf{M}^T$ 待求
  • (5) 最終旋轉矩陣 $\mathbf{X} = \mathbf{M}^T \mathbf{R}_x(\alpha) \mathbf{M}$ 待求

演算法幾何原理:為什麼這樣能求出任意軸旋轉?

出自經典教科書《Real-Time Rendering》第 4 章與 Goldman (1992) 旋轉推導

A 尋找最小分量置 0 的目的

若直接找與向量正交的向量,容易發生除以 0 或數值不穩定的情況。演算法將絕對值最小的分量設為 0,其餘兩分量對調並將前項變號,利用:
$(r_y)(-r_z) + (r_z)(r_y) = 0$ 保證所得向量 $\bar{\mathbf{s}}$ 與 $\mathbf{r}$ 的內積恆為 0,即 $\mathbf{s} \perp \mathbf{r}$。

B 構建正交基底 (Orthonormal Basis)

將 $\bar{\mathbf{s}}$ 單位化得 $\mathbf{s}$,再透過外積 $\mathbf{t} = \mathbf{r} \times \mathbf{s}$ 獲得第三個互斥垂直向量。 此時 $(\mathbf{r}, \mathbf{s}, \mathbf{t})$ 構成一個三維空間的規範正交基底。

C 基底轉換三步驟 $\mathbf{X} = \mathbf{M}^T \mathbf{R}_x(\alpha) \mathbf{M}$

1. 矩陣 $\mathbf{M}$ 將軸向 $\mathbf{r}$ 對齊到標準坐標軸的 $X$ 軸。
2. $\mathbf{R}_x(\alpha)$ 執行繞 $X$ 軸旋轉 $\alpha$ 弧度。
3. 逆轉換矩陣 $\mathbf{M}^{-1} = \mathbf{M}^T$ 將坐標系旋轉回原來的位置。

【考試與評分關鍵注意】旋轉軸 $\mathbf{r}$ 的單位化問題:

在《Real-Time Rendering》原書中,該公式的前提為「假設旋轉軸 $\mathbf{r}$ 已經為單位向量 ($\|\mathbf{r}\| = 1$)」。 白板上給定未單位化的 $\mathbf{r} = [1, 2, 3]$(長度 $\|\mathbf{r}\| = \sqrt{14}$)。若直接代入不除以長度,$\mathbf{M}$ 的第一列長度為 $\sqrt{14}$,將導致 $\mathbf{M}$ 不是正交矩陣($\mathbf{M}^T \ne \mathbf{M}^{-1}$),乘積會被放大多倍。
因此,正規教科書標準解法必須先將 $\mathbf{r}$ 單位化。下方我們以「標準圖學正規解」為主要解題流程,並在文末完整附上「若未先單位化 $\mathbf{r}$ 的代入結果」供比對。

1 第一步:求解正交單位向量 $\mathbf{s}$

根據投影片規則:找出 $\mathbf{r}$ 絕對值最小的分量,並將其設為 0;將其餘兩個分量對調,並將對調後的第一個分量變號。

向量 $\mathbf{r} = (r_x, r_y, r_z) = (1, 2, 3)$
各分量絕對值:$|r_x| = 1,\quad |r_y| = 2,\quad |r_z| = 3$
因為 $|r_x| < |r_y|$ 且 $|r_x| < |r_z|$($1 < 2$ 且 $1 < 3$),符合第一種條件分情況!

代入投影片公式第一條分段:

$$\bar{\mathbf{s}} = (0, -r_z, r_y) = (0, -3, 2)$$

驗證兩者是否正交(垂直):

$$\mathbf{r} \cdot \bar{\mathbf{s}} = 1 \times 0 + 2 \times (-3) + 3 \times 2 = 0 - 6 + 6 = 0 \quad (\checkmark \text{完全垂直})$$

計算 $\bar{\mathbf{s}}$ 的範數(長度)並進行單位化:

$$\|\bar{\mathbf{s}}\| = \sqrt{0^2 + (-3)^2 + 2^2} = \sqrt{0 + 9 + 4} = \sqrt{13} \approx 3.60555$$
小題 (1) 最終解答:
$$\mathbf{s} = \frac{\bar{\mathbf{s}}}{\|\bar{\mathbf{s}}\|} = \left(0, -\frac{3}{\sqrt{13}}, \frac{2}{\sqrt{13}}\right) \approx [0, -0.8321, 0.5547]$$

2 第二步:求解外積向量 $\mathbf{t} = \mathbf{r} \times \mathbf{s}$

為了構成三維標準正交基底(Orthonormal Frame),第三個軸向向量 $\mathbf{t}$ 必須同時垂直於 $\mathbf{r}$ 與 $\mathbf{s}$,利用外積求得。

【標準正規解法】使用單位化後的旋轉軸向量 $\mathbf{r}$: $$\mathbf{r} = \frac{[1, 2, 3]}{\sqrt{1^2+2^2+3^2}} = \left(\frac{1}{\sqrt{14}}, \frac{2}{\sqrt{14}}, \frac{3}{\sqrt{14}}\right) \approx [0.2673, 0.5345, 0.8018]$$ $$\mathbf{s} = \left(0, -\frac{3}{\sqrt{13}}, \frac{2}{\sqrt{13}}\right)$$

計算外積行列式:

$$\mathbf{t} = \mathbf{r} \times \mathbf{s} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ \frac{1}{\sqrt{14}} & \frac{2}{\sqrt{14}} & \frac{3}{\sqrt{14}} \\ 0 & -\frac{3}{\sqrt{13}} & \frac{2}{\sqrt{13}} \end{vmatrix}$$

分量逐項展開:

X 分量: $$t_x = \left(\frac{2}{\sqrt{14}}\right)\left(\frac{2}{\sqrt{13}}\right) - \left(\frac{3}{\sqrt{14}}\right)\left(-\frac{3}{\sqrt{13}}\right)$$ $$t_x = \frac{4 + 9}{\sqrt{182}} = \frac{13}{\sqrt{182}} = \sqrt{\frac{13}{14}} \approx 0.9636$$
Y 分量: $$t_y = \left(\frac{3}{\sqrt{14}}\right)(0) - \left(\frac{1}{\sqrt{14}}\right)\left(\frac{2}{\sqrt{13}}\right)$$ $$t_y = -\frac{2}{\sqrt{182}} \approx -0.1483$$
Z 分量: $$t_z = \left(\frac{1}{\sqrt{14}}\right)\left(-\frac{3}{\sqrt{13}}\right) - \left(\frac{2}{\sqrt{14}}\right)(0)$$ $$t_z = -\frac{3}{\sqrt{182}} \approx -0.2224$$
小題 (2) 最終解答:
$$\mathbf{t} = \left(\frac{13}{\sqrt{182}}, -\frac{2}{\sqrt{182}}, -\frac{3}{\sqrt{182}}\right) \approx [0.9636, -0.1483, -0.2224]$$

驗證長度:$\|\mathbf{t}\| = \sqrt{\frac{169 + 4 + 9}{182}} = \sqrt{\frac{182}{182}} = 1$(長度為 1,標準單位向量)。

3 第三步:組裝基底轉換矩陣 $\mathbf{M}$

根據公式 $\mathbf{M} = \begin{pmatrix} \mathbf{r}^T \\ \mathbf{s}^T \\ \mathbf{t}^T \end{pmatrix}$,矩陣的三個列向量(Rows)分別由 $\mathbf{r}, \mathbf{s}, \mathbf{t}$ 排列組成:

精確根號表達式: $$\mathbf{M} = \begin{pmatrix} \frac{1}{\sqrt{14}} & \frac{2}{\sqrt{14}} & \frac{3}{\sqrt{14}} \\ 0 & -\frac{3}{\sqrt{13}} & \frac{2}{\sqrt{13}} \\ \frac{13}{\sqrt{182}} & -\frac{2}{\sqrt{182}} & -\frac{3}{\sqrt{182}} \end{pmatrix}$$
小題 (3) 最終數值解:
$$\mathbf{M} \approx \begin{pmatrix} 0.2673 & 0.5345 & 0.8018 \\ 0.0000 & -0.8321 & 0.5547 \\ 0.9636 & -0.1483 & -0.2224 \end{pmatrix}$$

4 第四步:求解轉置矩陣 $\mathbf{M}^T$

將 $\mathbf{M}$ 的行與列對調即可得轉置矩陣 $\mathbf{M}^T$。因為 $\mathbf{M}$ 是正交矩陣,其逆矩陣等於轉置矩陣,即 $\mathbf{M}^{-1} = \mathbf{M}^T$:

精確根號表達式: $$\mathbf{M}^T = \begin{pmatrix} \frac{1}{\sqrt{14}} & 0 & \frac{13}{\sqrt{182}} \\ \frac{2}{\sqrt{14}} & -\frac{3}{\sqrt{13}} & -\frac{2}{\sqrt{182}} \\ \frac{3}{\sqrt{14}} & \frac{2}{\sqrt{13}} & -\frac{3}{\sqrt{182}} \end{pmatrix}$$
小題 (4) 最終數值解:
$$\mathbf{M}^T \approx \begin{pmatrix} 0.2673 & 0.0000 & 0.9636 \\ 0.5345 & -0.8321 & -0.1483 \\ 0.8018 & 0.5547 & -0.2224 \end{pmatrix}$$

5 第五步:計算最終變換矩陣 $\mathbf{X} = \mathbf{M}^T \mathbf{R}_x(\alpha) \mathbf{M}$

旋轉角度給定為 $\alpha = 1.5\text{ radians}$,繞 $X$ 軸基本旋轉矩陣 $\mathbf{R}_x(\alpha)$ 為:

三角函數數值計算: $$\cos(1.5) \approx 0.070737$$ $$\sin(1.5) \approx 0.997495$$ $$1 - \cos(1.5) \approx 0.929263$$
繞 X 軸標準旋轉矩陣 $\mathbf{R}_x(1.5)$: $$\mathbf{R}_x(\alpha) = \begin{pmatrix} 1 & 0 & 0 \\ 0 & \cos\alpha & -\sin\alpha \\ 0 & \sin\alpha & \cos\alpha \end{pmatrix} \approx \begin{pmatrix} 1 & 0 & 0 \\ 0 & 0.0707 & -0.9975 \\ 0 & 0.9975 & 0.0707 \end{pmatrix}$$

驗證:投影片第二張 Goldman [1992] / Rodrigues 旋轉公式的完美對應

由幾何代數性質,基底對齊運算 $\mathbf{X} = \mathbf{M}^T \mathbf{R}_x(\alpha) \mathbf{M}$ 乘開後的結果,在數學上恆等於投影片第二張展示的 Goldman 旋轉矩陣 $\mathbf{R}$:

$$R_{ij} = \cos\alpha \cdot \delta_{ij} + (1 - \cos\alpha) r_i r_j + \sin\alpha \sum_k \epsilon_{ijk} r_k$$
$X_{11} = 0.0707 + (0.9293)(\frac{1}{14}) \approx \mathbf{0.1371}$
$X_{12} = (0.9293)(\frac{2}{14}) - \frac{3}{\sqrt{14}}(0.9975) \approx \mathbf{-0.6670}$
$X_{13} = (0.9293)(\frac{3}{14}) + \frac{2}{\sqrt{14}}(0.9975) \approx \mathbf{0.7323}$
$X_{21} = (0.9293)(\frac{2}{14}) + \frac{3}{\sqrt{14}}(0.9975) \approx \mathbf{0.9325}$
$X_{22} = 0.0707 + (0.9293)(\frac{4}{14}) \approx \mathbf{0.3362}$
$X_{23} = (0.9293)(\frac{6}{14}) - \frac{1}{\sqrt{14}}(0.9975) \approx \mathbf{0.1317}$
$X_{31} = (0.9293)(\frac{3}{14}) - \frac{2}{\sqrt{14}}(0.9975) \approx \mathbf{-0.3341}$
$X_{32} = (0.9293)(\frac{6}{14}) + \frac{1}{\sqrt{14}}(0.9975) \approx \mathbf{0.6648}$
$X_{33} = 0.0707 + (0.9293)(\frac{9}{14}) \approx \mathbf{0.6681}$
小題 (5) 最終解答矩陣 $\mathbf{X}$:
$$\mathbf{X} \approx \begin{pmatrix} 0.1371 & -0.6670 & 0.7323 \\ 0.9325 & 0.3362 & 0.1317 \\ -0.3341 & 0.6648 & 0.6681 \end{pmatrix}$$

✓ 旋轉矩陣特徵檢驗:行列式 $\det(\mathbf{X}) = 1.0000$;跡數 $\text{Tr}(\mathbf{X}) = 0.1371 + 0.3362 + 0.6681 = 1.1415$(理論值 $1 + 2\cos(1.5) = 1 + 2(0.0707) = 1.1415$ 吻合!)。

兩種考情情況對照表(避免教授評分標準不一扣分)

部分考試或教授出題時,可能單純按黑板符號代入而忽略單位化,下表將「正規標準解(推薦)」與「未單位化直接代入」兩組答案完整並列:

題目要求 標準正規解($\mathbf{r}$ 為單位向量)★推薦 備用:若題目認定 $\mathbf{r}=[1,2,3]$ 不需單位化
(1) $\mathbf{s}$ $(0, -\frac{3}{\sqrt{13}}, \frac{2}{\sqrt{13}}) \approx [0, -0.8321, 0.5547]$ $(0, -\frac{3}{\sqrt{13}}, \frac{2}{\sqrt{13}}) \approx [0, -0.8321, 0.5547]$(相同,因分子分母長度相消)
(2) $\mathbf{t}$ $(\frac{13}{\sqrt{182}}, -\frac{2}{\sqrt{182}}, -\frac{3}{\sqrt{182}}) \approx [0.9636, -0.1483, -0.2224]$ $\mathbf{r} \times \mathbf{s} = (\sqrt{13}, -\frac{2}{\sqrt{13}}, -\frac{3}{\sqrt{13}}) \approx [3.6056, -0.5547, -0.8321]$
(3) $\mathbf{M}$ 列向量皆為單位向量,為標準正交矩陣 第一列為 $[1, 2, 3]$,第三列長度為 $\sqrt{14}$
(4) $\mathbf{M}^T$ $\mathbf{M}$ 的行列互換(滿足 $\mathbf{M}^T = \mathbf{M}^{-1}$) $\mathbf{M}$ 的行列互換(但此時 $\mathbf{M}^T \ne \mathbf{M}^{-1}$)
(5) $\mathbf{X}$ 保距的旋轉矩陣($\det=1$),完全符合 Goldman 公式 含非單位縮放因數,非純旋轉矩陣