假设有两个坐标系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⎠⎞+⎝⎛xxcyxczxcxycyyczycxzcyzczzc⎠⎞⋅⎝⎛abc⎠⎞
使用齐次坐标表示:
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⎠⎟⎟⎞+⎝⎜⎜⎛xxcyxczxc0xycyyczyc0xzcyzczzc00001⎠⎟⎟⎞⋅⎝⎜⎜⎛abc1⎠⎟⎟⎞
把原点向量代入矩阵:
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=⎝⎜⎜⎛xxcyxczxc0xycyyczyc0xzcyzczzc0xocyoczoc1⎠⎟⎟⎞⋅⎝⎜⎜⎛abc1⎠⎟⎟⎞
简化表示:
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=Mc→p⋅Ac
由此,我们得到了从子空间到父空间的转换矩阵 M c → p {M_{c\rightarrow p}} Mc→p.
现已知:
A p = M c → p ⋅ A c A_p=M_{c\rightarrow p}\cdot A_c Ap=Mc→p⋅Ac
现在要求 M c → p M_{c\rightarrow p} Mc→p.
由于 A c = M p → c ⋅ A p A_c=M_{p\rightarrow c} \cdot A_p Ac=Mp→c⋅Ap
以上两等式结合:
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=Mc→p⋅(Mp→c⋅Ap)Ap=(Mc→p⋅Mp→c)⋅ApMp→c=(Mc→p)−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=Mc→p⋅Ac
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) Mc→p=(Xc0Yc0Zc0Oc1)
上文的推导假定是已知坐标系信息,推导出矩阵.
这里可以看出来,矩阵的前三列为原空间在目标空间的基向量. 最后一列为原空间在目标空间的原点位置.