深入理解坐标系的变换
在世界坐标系中对某个模型进行一个变换,旋转 R ∗ R^* R∗,平移 t ∗ t^* t∗。
已知模型坐标系中模型上所有点的坐标,以及世界坐标系中模型的位姿,求模型变换后所有点在世界坐标系中的位姿。
简化为符号语言: p p p代表模型中的任一点, o o o代表坐标系的原点,右上角标代表从哪个坐标系的视角来看。0、1、2分别代表世界坐标系、模型坐标系、变换过的模型坐标系。 p 1 p_1 p1是模型中的任一点, p 2 p_2 p2是变换后的模型中与 p 1 p_1 p1对应的点, o 0 o_0 o0是世界坐标系的原点, o 1 o_1 o1是模型坐标系的原点, o 2 o_2 o2是变化后的模型坐标系的原点。
举例: p 1 0 p^0_1 p10代表世界坐标系下的 p 1 p_1 p1点的位置; t ∗ = o 2 0 − o 1 0 t^*=o^0_2-o^0_1 t∗=o20−o10代表世界坐标系下从模型坐标系原点到变换后的模型坐标系原点的位移;
那么问题可以描述为,已知:
p 1 1 = p 2 2 p 1 0 = R 1 0 ⋅ p 1 1 + o 1 0 p 2 0 = R 2 0 ⋅ p 2 2 + o 2 0 p 2 0 − o 2 0 = R ∗ ⋅ ( p 1 0 − o 1 0 ) t ∗ = o 2 0 − o 1 0 \begin{align} p^1_1 &= p^2_2\\ p^0_1 &= R^0_1 \cdot p^1_1 + o^0_1\\ p^0_2 &= R^0_2 \cdot p^2_2 + o^0_2\\ p^0_2-o^0_2 &= R^* \cdot (p^0_1-o^0_1)\\ t^* &= o^0_2-o^0_1\\ \end{align} p11p10p20p20−o20t∗=p22=R10⋅p11+o10=R20⋅p22+o20=R∗⋅(p10−o10)=o20−o10
1 \mathit{1} 1:因为 p 2 p_2 p2是变换后的模型中与 p 1 p_1 p1对应的点
2 , 3 \mathit{2}, \mathit{3} 2,3:坐标变换的基本原理
4 , 5 \mathit{4}, \mathit{5} 4,5:在世界坐标系中对模型进行变换的原理
那么为了求 p 2 0 p^0_2 p20,从上式可知, R ∗ = R 2 0 ( R 1 0 ) − 1 R^*=R^0_2(R^0_1)^{-1} R∗=R20(R10)−1,进而 p 2 0 = R ∗ ⋅ R 1 0 ⋅ p 1 1 + o 1 0 + t ∗ p^0_2=R^* \cdot R^0_1 \cdot p^1_1 + o^0_1 + t^* p20=R∗⋅R10⋅p11+o10+t∗,解毕。
这里的 R ∗ = R 2 0 ⋅ ( R 1 0 ) − 1 R^*=R^0_2\cdot (R^0_1)^{-1} R∗=R20⋅(R10)−1以及 p 2 0 − o 2 0 = R ∗ ⋅ ( p 1 0 − o 1 0 ) p^0_2-o^0_2 = R^* \cdot (p^0_1-o^0_1) p20−o20=R∗⋅(p10−o10)揭示了施加变换旋转的原理:世界坐标系下的向量 ( p 1 0 − o 1 0 ) (p^0_1-o^0_1) (p10−o10)通过 ( R 1 0 ) − 1 (R^0_1)^{-1} (R10)−1进入到模型坐标系中,然后再施加 R 2 0 R^0_2 R20就能再次进入到世界坐标系中(由于模型坐标系中的p1和变换后的模型坐标系中的p2是对应的)。