3D 坐标变换 公式 推导

更新 1 [用抽象代数讨论仿射变换和仿射空间中的坐标变换] ,以下是之前的内容。

下面使用行向量:

e1=(1,0,0)
e2=(0,1,0)
e3=(0,0,1)
i, j, k是三个线性无关的向量2,它们在e1,e2,e3坐标系下的坐标也记作i,j,k
i’, j’, k’是三个线性无关的向量,它们在e1,e2,e3坐标系下的坐标也记作i’, j’, k’


d e n o t e [ i j k ] = A , [ i ′ j ′ k ′ ] = B denote \quad \begin{bmatrix}i\\j\\k\end{bmatrix}=A,\begin{bmatrix}i'\\j'\\k'\end{bmatrix}=B denoteijk=A,ijk=B
《3D 坐标变换 公式 推导》

已知点P相对于Oijk的坐标是(x,y,z)
则点P相对于O’i’j’k’的坐标:

( x ′ , y ′ , z ′ ) = ( ( x , y , z ) A + ( O − O ′ ) ) B − 1 (x',y',z')=((x,y,z)A+(O-O'))B^{-1} (x,y,z)=((x,y,z)A+(OO))B1

若B是正交矩阵,就不用求逆了,求转置就是。
特别地,
若O=(0,0,0),i=e1,j=e2,k=e3,则
( x ′ , y ′ , z ′ ) = ( ( x , y , z ) − O ′ ) ) B − 1 (x',y',z')=((x,y,z)-O'))B^{-1} (x,y,z)=((x,y,z)O))B1

##推导

设点P相对于O’i’j’k’的坐标是(x’,y’,z’)

∵ P = O + ( x , y , z ) A = O ′ + ( x ′ , y ′ , z ′ ) B \because P =O+(x,y,z)A=O'+(x',y',z')B P=O+(x,y,z)A=O+(x,y,z)B
∴ ( x ′ , y ′ , z ′ ) = ( ( x , y , z ) A + ( O − O ′ ) ) B − 1 \therefore(x',y',z')=((x,y,z)A+(O-O'))B^{-1} (x,y,z)=((x,y,z)A+(OO))B1

##补充
B = A M ( M = A − 1 B ) B=AM\quad (M=A^{-1}B) B=AM(M=A1B),即M是把i,j,k变换到i’,j’,k’的变换矩阵
∴ ( x ′ , y ′ , z ′ ) = ( ( x , y , z ) A + ( O − O ′ ) ) M − 1 A − 1 \therefore(x',y',z')=((x,y,z)A+(O-O'))M^{-1}A^{-1} (x,y,z)=((x,y,z)A+(OO))M1A1
特别地,
若O=(0,0,0),i=e1,j=e2,k=e3,则
( x ′ , y ′ , z ′ ) = ( ( x , y , z ) − O ′ ) ) M − 1 a n d M = B (x',y',z')=((x,y,z)-O'))M^{-1}\quad and \quad M=B (x,y,z)=((x,y,z)O))M1andM=B

应用

实际应用中,用到的一般都是O=(0,0,0),i=e1,j=e2,k=e3的特殊情况,
这是因为:问题在描述O’i’j’k’坐标的时候一般都是相对于Oikj而言的;
这里没有绝对的坐标系,仿射空间中任何一个点都看以看成(0,0,…0),任意一组基都可以看成{(1,0,…0), (0,1,…0), (0,0,…1)}。
( x , y , z , 1 ) [ M − 1 0 − O ′ M − 1 1 ] = ( x ′ , y ′ , z ′ , 1 ) (x,y,z,1)\begin{bmatrix} M^{-1}& 0\\ -O'M^{-1}& 1 \\ \end{bmatrix}=(x',y',z',1) (x,y,z,1)[M1OM101]=(x,y,z,1)
[ M − 1 0 − O ′ M − 1 1 ] = [ M 0 O ′ 1 ] − 1 \begin{bmatrix} M^{-1}& 0\\ -O'M^{-1}& 1 \\ \end{bmatrix}=\begin{bmatrix} M& 0\\ O'& 1 \\ \end{bmatrix}^{-1} [M1OM101]=[MO01]1

换个角度理解

点P不动,把坐标架O,i,j,k变换到O’,i’,j’,k’,则变换矩阵是 ( M 0 O ′ 1 ) \begin{pmatrix} M & 0 \\ O' & 1 \end{pmatrix} (MO01), M=B,
就相当于 坐标架不动,点P逆着上述变换,变换到新坐标。

变换的两种方式

①先原地变换坐标架,再平移坐标架
[ B 0 0 1 ] [ I 0 O ′ 1 ] = [ B 0 O ′ 1 ] \begin{bmatrix} B &0 \\ 0&1 \\ \end{bmatrix} \begin{bmatrix} I &0 \\ O' & 1 \\ \end{bmatrix} =\begin{bmatrix} B &0 \\ O' &1 \\ \end{bmatrix} [B001][IO01]=[BO01]
②先平移坐标架,再相对平移之后的原点变换坐标架
[ I 0 O ′ 1 ] X = [ B 0 O ′ 1 ] X = [ B 0 O ′ − O ′ B 1 ] \begin{bmatrix} I &0 \\ O' & 1 \\ \end{bmatrix}X=\begin{bmatrix} B &0 \\ O' &1 \\ \end{bmatrix}\qquad X=\begin{bmatrix} B &0 \\ O'-O'B &1 \\ \end{bmatrix} [IO01]X=[BO01]X=[BOOB01]
X可以看成先平移回原点,相对原点 原地变换 坐标架,再平移过去:
X = [ B 0 − O ′ B 1 ] [ I 0 O ′ 1 ] X=\begin{bmatrix} B &0 \\ -O'B &1 \\ \end{bmatrix}\begin{bmatrix} I &0 \\ O'&1 \\ \end{bmatrix} X=[BOB01][IO01]
[ B 0 − O ′ B 1 ] = [ I 0 − O ′ 1 ] [ B 0 0 1 ] \begin{bmatrix} B &0 \\ -O'B &1 \\ \end{bmatrix}=\begin{bmatrix} I &0 \\ -O' &1 \\ \end{bmatrix}\begin{bmatrix} B &0 \\ 0&1 \\ \end{bmatrix} [BOB01]=[IO01][B001]

注意到 X 与 ( B 0 0 1 ) \begin{pmatrix} B & 0 \\ 0 & 1 \end{pmatrix} (B001) 是相似矩阵,正是同一(4维的)线性变换在不同基下的坐标表示。3

  1. Someone in the comments missed it. 所以加粗了。 ↩︎

  2. @评论,不要求 i,j,k 的单位长度和正交性。 ↩︎

  3. http://blog.csdn.net/u010476094/article/details/50551014 ↩︎

    原文作者:SpaceKitt
    原文地址: https://blog.csdn.net/u010476094/article/details/44839347
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞