坐标空间转换矩阵

文章目录

    • 推导
      • 子空间到父空间转换矩阵
      • 父空间到子空间转换矩阵
    • 扩展
      • 反向推导--从矩阵中获得坐标系信息

推导

子空间到父空间转换矩阵

假设有两个坐标系P和C,其中C为P的子坐标系.
定义一个坐标系需要原点和轴向量:

假定C的(在P坐标系中)
坐标原点: O c O_c Oc
基向量: X c , Y c , Z c X_c,Y_c,Z_c Xc,Yc,Zc

给定一个子空间C中的一点 A c = ( a , b , c ) A_c=(a,b,c) Ac=(a,b,c)

我们知道一个坐标的值为原点加上各坐标值乘以对应基向量.
可以如下表示:
( x , y , z ) = O + a X + b Y + c Z (x,y,z) = O+aX+bY+cZ (x,y,z)=O+aX+bY+cZ

那么A点在P的坐标:
A p = O c + a X c + b Y c + c Z c A_p = O_c+aX_c+bY_c+cZ_c Ap=Oc+aXc+bYc+cZc
把基向量用坐标方式表示:
A p = ( x o c , y o c , z o c ) + a ( x x c , y x c , z x c ) + b ( x y c , y y c , z y c ) + c ( x z c , y z c , z z c ) \begin{aligned} A_p= (x_{o_c},y_{o_c},z_{o_c})+a(x_{x_c},y_{x_c},z_{x_c})+\\ b(x_{y_c},y_{y_c},z_{y_c})+c(x_{z_c},y_{z_c},z_{z_c})\\ \end{aligned} Ap=(xoc,yoc,zoc)+a(xxc,yxc,zxc)+b(xyc,yyc,zyc)+c(xzc,yzc,zzc)
用列向量来表示坐标并使用矩阵表示:
A p = ( x o c y o c z o c ) + ( x x c x y c x z c y x c y y c y z c z x c z y c z z c ) ⋅ ( a b c ) A_p= \left(\begin{matrix} x_{o_c}\\y_{o_c}\\z_{o_c} \end{matrix}\right)+ \left(\begin{matrix} x_{x_c}&x_{y_c} & x_{z_c}\\ y_{x_c} &y_{y_c}&y_{z_c}\\ z_{x_c}&z_{y_c} &z_{z_c}\\ \end{matrix}\right) \cdot \left(\begin{matrix} a \\b\\c \end{matrix}\right) Ap=xocyoczoc+xxcyxczxcxycyyczycxzcyzczzcabc
使用齐次坐标表示:
A p = ( x o c y o c z o c 1 ) + ( x x c x y c x z c 0 y x c y y c y z c 0 z x c z y c z z c 0 0 0 0 1 ) ⋅ ( a b c 1 ) A_p= \left(\begin{matrix} x_{o_c}\\y_{o_c}\\z_{o_c}\\1 \end{matrix}\right)+ \left(\begin{matrix} x_{x_c}&x_{y_c} & x_{z_c}&0\\ y_{x_c} &y_{y_c}&y_{z_c}&0\\ z_{x_c}&z_{y_c} &z_{z_c}&0\\ 0&0&0&1 \end{matrix}\right) \cdot \left(\begin{matrix} a \\b\\c\\1 \end{matrix}\right) Ap=xocyoczoc1+xxcyxczxc0xycyyczyc0xzcyzczzc00001abc1
把原点向量代入矩阵:
A p = ( x x c x y c x z c x o c y x c y y c y z c y o c z x c z y c z z c z o c 0 0 0 1 ) ⋅ ( a b c 1 ) A_p= \left(\begin{matrix} x_{x_c}&x_{y_c} & x_{z_c}& x_{o_c}\\ y_{x_c} &y_{y_c}&y_{z_c}&y_{o_c}\\ z_{x_c}&z_{y_c} &z_{z_c}&z_{o_c}\\ 0&0&0&1 \end{matrix}\right) \cdot \left(\begin{matrix} a \\b\\c\\1 \end{matrix}\right) Ap=xxcyxczxc0xycyyczyc0xzcyzczzc0xocyoczoc1abc1
简化表示:
A p = ( X c Y c Z c O c 0 0 0 1 ) ⋅ A c A_p= \left(\begin{matrix} X_c&Y_c&Z_c&O_c\\ 0&0&0&1 \end{matrix}\right) \cdot A_c Ap=(Xc0Yc0Zc0Oc1)Ac

A p = M c → p ⋅ A c A_p=M_{c\rightarrow p}\cdot A_c Ap=McpAc
由此,我们得到了从子空间到父空间的转换矩阵 M c → p {M_{c\rightarrow p}} Mcp.

父空间到子空间转换矩阵

现已知:
A p = M c → p ⋅ A c A_p=M_{c\rightarrow p}\cdot A_c Ap=McpAc
现在要求 M c → p M_{c\rightarrow p} Mcp.
由于 A c = M p → c ⋅ A p A_c=M_{p\rightarrow c} \cdot A_p Ac=MpcAp
以上两等式结合:
A p = M c → p ⋅ ( M p → c ⋅ A p ) A p = ( M c → p ⋅ M p → c ) ⋅ A p M p → c = ( M c → p ) − 1 \begin{aligned}A_p=M_{c\rightarrow p}\cdot (M_{p\rightarrow c} \cdot A_p)\\ A_p=(M_{c\rightarrow p}\cdot M_{p\rightarrow c} )\cdot A_p\\ M_{p\rightarrow c}= (M_{c\rightarrow p} )^ {-1} \end{aligned} Ap=Mcp(MpcAp)Ap=(McpMpc)ApMpc=(Mcp)1
由此可以得出结论父空间到子空间的转换矩阵和子空间到父空间的转换矩阵互逆.

扩展

反向推导–从矩阵中获得坐标系信息

这里再看一下上文推导的矩阵.
A p = ( X c Y c Z c O c 0 0 0 1 ) ⋅ A c A_p= \left(\begin{matrix} X_c&Y_c&Z_c&O_c\\ 0&0&0&1 \end{matrix}\right) \cdot A_c Ap=(Xc0Yc0Zc0Oc1)Ac

A p = M c → p ⋅ A c A_p=M_{c\rightarrow p}\cdot A_c Ap=McpAc
M c → p = ( X c Y c Z c O c 0 0 0 1 ) M_{c\rightarrow p}=\left(\begin{matrix} X_c&Y_c&Z_c&O_c\\ 0&0&0&1 \end{matrix}\right) Mcp=(Xc0Yc0Zc0Oc1)
上文的推导假定是已知坐标系信息,推导出矩阵.
这里可以看出来,矩阵的前三列为原空间在目标空间的基向量. 最后一列为原空间在目标空间的原点位置.

你可能感兴趣的:(坐标空间转换矩阵)