天天看點

左右手坐标系的轉換左手系與右手系的旋轉正方向點的轉換旋轉的轉換結論

文章目錄

  • 左手系與右手系的旋轉正方向
  • 點的轉換
  • 旋轉的轉換
    • 旋轉矩陣
    • 四元數
  • 結論
    • X軸取反
    • Y軸取反
    • Z軸取反

本文描述了左右手坐标系的資料轉換過程,其中包括點,平移,旋轉(旋轉矩陣,四元數)。以不同手系中點的轉換出發,詳細推導了旋轉矩陣以及四元數的轉換過程,并且在文末的結論中給出了三種情況下(X軸取反,Y軸取反,Z軸取反)的平移(點)和旋轉的轉換(旋轉矩陣,四元數)。

參考:左右手坐标系的資料轉換

左手系與右手系的旋轉正方向

左右手坐标系的轉換左手系與右手系的旋轉正方向點的轉換旋轉的轉換結論
左右手坐标系的轉換左手系與右手系的旋轉正方向點的轉換旋轉的轉換結論
  • 判斷方法:大拇指指向旋轉軸正方向,剩餘四個手指彎曲方向為旋轉正方向。可以看出左手系中旋轉正方向是順時針,右手系中旋轉正方向是逆時針

點的轉換

點在左右手系中的轉換最簡單,隻需要将某一個軸分量取反。以Z軸取反為例,右手系中的點Pr(x,y,z)在左手系中轉換為點Pl(x,y,-z),用矩陣表示為:

P l = [ x y − z ] = [ 1 0 0 0 1 0 0 0 − 1 ] [ x y z ] = S T P r P_l=\begin{bmatrix} x\\y\\-z\\\end{bmatrix} = \begin{bmatrix}1&0&0\\0&1&0\\0&0&-1\end{bmatrix} \begin{bmatrix}x \\y\\z\end{bmatrix}=S_TP_r Pl​=⎣⎡​xy−z​⎦⎤​=⎣⎡​100​010​00−1​⎦⎤​⎣⎡​xyz​⎦⎤​=ST​Pr​

點的轉換矩陣為:

S T = [ 1 0 0 0 1 0 0 0 − 1 ] S_T= \begin{bmatrix}1&0&0\\0&1&0\\0&0&-1\end{bmatrix} ST​=⎣⎡​100​010​00−1​⎦⎤​

旋轉的轉換

旋轉矩陣

假設一個右手系中的旋轉矩陣為:

R r = [ r 00 r 01 r 02 r 10 r 11 r 12 r 20 r 21 r 22 ] R_r=\begin{bmatrix}r_{00}&r_{01}&r_{02}\\r_{10}&r_{11}&r_{12}\\r_{20}&r_{21}&r_{22}\end{bmatrix} Rr​=⎣⎡​r00​r10​r20​​r01​r11​r21​​r02​r12​r22​​⎦⎤​

輸入一個點Pr(x,y,z)經過該矩陣變換後輸出點Pr’(x’,y’,z’):

P r ′ = [ x ′ y ′ z ′ ] = [ r 00 r 01 r 02 r 10 r 11 r 12 r 20 r 21 r 22 ] [ x y z ] = R r P r P'_r= \begin{bmatrix} x'\\y'\\z'\end{bmatrix}=\begin{bmatrix}r_{00}&r_{01}&r_{02}\\r_{10}&r_{11}&r_{12}\\r_{20}&r_{21}&r_{22}\end{bmatrix} \begin{bmatrix} x\\y\\z\end{bmatrix}=R_rP_r Pr′​=⎣⎡​x′y′z′​⎦⎤​=⎣⎡​r00​r10​r20​​r01​r11​r21​​r02​r12​r22​​⎦⎤​⎣⎡​xyz​⎦⎤​=Rr​Pr​

在左手系中,輸入和輸出的Z軸分量都取反,于是在左手系中的變換為 P l = ( x , y , − z ) → ( x ′ , y ′ , − z ′ ) = P l ′ P_l=(x,y,-z)\rightarrow (x',y',-z')=P_l' Pl​=(x,y,−z)→(x′,y′,−z′)=Pl′​

P l ′ = S T P r ′ = S T R r P r = S T R r S T P l P_l'=S_TP_r'=S_TR_rP_r=S_TR_rS_TP_l Pl′​=ST​Pr′​=ST​Rr​Pr​=ST​Rr​ST​Pl​

是以,在左手系中的旋轉矩陣變為:

R l = S T R r S T R_l=S_TR_rS_T Rl​=ST​Rr​ST​

可以了解為在左手系中将該旋轉拆分為三步:

  1. 将左手系中的點變換到右手系中
  2. 根據右手系中的旋轉矩陣進行旋轉
  3. 将旋轉後的點變換到左手系中

将點轉換矩陣帶入計算:

R l = [ 1 0 0 0 1 0 0 0 − 1 ] [ r 00 r 01 r 02 r 10 r 11 r 12 r 20 r 21 r 22 ] [ 1 0 0 0 1 0 0 0 − 1 ] = [ r 00 r 01 − r 02 r 10 r 11 − r 12 − r 20 − r 21 r 22 ] R_l=\begin{bmatrix}1&0&0\\0&1&0\\0&0&-1\end{bmatrix} \begin{bmatrix}r_{00}&r_{01}&r_{02}\\r_{10}&r_{11}&r_{12}\\r_{20}&r_{21}&r_{22}\end{bmatrix} \begin{bmatrix}1&0&0\\0&1&0\\0&0&-1\end{bmatrix} =\begin{bmatrix}r_{00}&r_{01}&-r_{02}\\r_{10}&r_{11}&-r_{12}\\-r_{20}&-r_{21}&r_{22}\end{bmatrix} Rl​=⎣⎡​100​010​00−1​⎦⎤​⎣⎡​r00​r10​r20​​r01​r11​r21​​r02​r12​r22​​⎦⎤​⎣⎡​100​010​00−1​⎦⎤​=⎣⎡​r00​r10​−r20​​r01​r11​−r21​​−r02​−r12​r22​​⎦⎤​

四元數

由旋轉矩陣轉四元數的轉換公式可得:

q 0 l = 1 + t r ( R l ) 2 = q 0 q 1 l = − r 12 − ( − r 21 ) 4 q 0 = − r 12 − r 21 4 q 0 = − q 1 q 2 l = − r 20 − ( − r 02 ) 4 q 0 = − r 20 − r 02 4 q 0 = − q 2 q 3 l = r 01 − r 10 4 q 0 = q 3 q_{0l}=\frac{\sqrt{1+tr(R_l)}}{2}=q_0\\ q_{1l}=\frac{-r_{12}-(-r_{21})}{4q_0}=-\frac{r_{12}-r_{21}}{4q_0}=-q_1\\ q_{2l}=\frac{-r_{20}-(-r_{02})}{4q_0}=-\frac{r_{20}-r_{02}}{4q_0}=-q_2\\ q_{3l}=\frac{r_{01}-r_{10}}{4q_0}=q_3 q0l​=21+tr(Rl​)

​​=q0​q1l​=4q0​−r12​−(−r21​)​=−4q0​r12​−r21​​=−q1​q2l​=4q0​−r20​−(−r02​)​=−4q0​r20​−r02​​=−q2​q3l​=4q0​r01​−r10​​=q3​

結論

X軸取反

點轉換矩陣:

S T = [ − 1 0 0 0 1 0 0 0 1 ] S_T= \begin{bmatrix}-1&0&0\\0&1&0\\0&0&1\end{bmatrix} ST​=⎣⎡​−100​010​001​⎦⎤​

旋轉矩陣:

[ r 00 − r 01 − r 02 − r 10 r 11 r 12 − r 20 r 21 r 22 ] \begin{bmatrix}r_{00}&-r_{01}&-r_{02}\\-r_{10}&r_{11}&r_{12}\\-r_{20}&r_{21}&r_{22}\end{bmatrix} \\ ⎣⎡​r00​−r10​−r20​​−r01​r11​r21​​−r02​r12​r22​​⎦⎤​

四元數:

q 0 l = q 0 q 1 l = q 1 q 2 l = − q 2 q 3 l = − q 3 q_{0l}=q_0\\ q_{1l}=q_1\\ q_{2l}=-q_2\\ q_{3l}=-q_3 q0l​=q0​q1l​=q1​q2l​=−q2​q3l​=−q3​

Y軸取反

點轉換矩陣:

S T = [ 1 0 0 0 − 1 0 0 0 1 ] S_T= \begin{bmatrix}1&0&0\\0&-1&0\\0&0&1\end{bmatrix} ST​=⎣⎡​100​0−10​001​⎦⎤​

旋轉矩陣:

[ r 00 − r 01 r 02 − r 10 r 11 − r 12 r 20 − r 21 r 22 ] \begin{bmatrix}r_{00}&-r_{01}&r_{02}\\-r_{10}&r_{11}&-r_{12}\\r_{20}&-r_{21}&r_{22}\end{bmatrix} \\ ⎣⎡​r00​−r10​r20​​−r01​r11​−r21​​r02​−r12​r22​​⎦⎤​

四元數:

q 0 l = q 0 q 1 l = − q 1 q 2 l = q 2 q 3 l = − q 3 q_{0l}=q_0\\ q_{1l}=-q_1\\ q_{2l}=q_2\\ q_{3l}=-q_3 q0l​=q0​q1l​=−q1​q2l​=q2​q3l​=−q3​

Z軸取反

點轉換矩陣:

S T = [ 1 0 0 0 1 0 0 0 − 1 ] S_T= \begin{bmatrix}1&0&0\\0&1&0\\0&0&-1\end{bmatrix} ST​=⎣⎡​100​010​00−1​⎦⎤​

旋轉矩陣:

[ r 00 r 01 − r 02 r 10 r 11 − r 12 − r 20 − r 21 r 22 ] \begin{bmatrix}r_{00}&r_{01}&-r_{02}\\r_{10}&r_{11}&-r_{12}\\-r_{20}&-r_{21}&r_{22}\end{bmatrix} \\ ⎣⎡​r00​r10​−r20​​r01​r11​−r21​​−r02​−r12​r22​​⎦⎤​

四元數:

q 0 l = q 0 q 1 l = − q 1 q 2 l = − q 2 q 3 l = q 3 q_{0l}=q_0\\ q_{1l}=-q_1\\ q_{2l}=-q_2\\ q_{3l}=q_3 q0l​=q0​q1l​=−q1​q2l​=−q2​q3l​=q3​

上一篇: 2. 坐标系
下一篇: IOC實作

繼續閱讀