不同3D坐标系上的点的坐标变换的计算

3D编程中,很多时候会遇到不同坐标系上一个点的坐标的转换的问题:即将一个坐标系上的点映射到另一坐标系上.

(1) 此处讨论求一个非标准坐标系上的点(相对值)在标准坐标系上的值(实际值).举个例子:假设以前的坐标系是标准的3D坐标系C1(opengl右手系):Z轴为(0,0,-1),X轴为(1,0,0),Y轴为(0,1,0).可以以Z轴为主,X轴取水平,即可求出Y(Y=X*Z,注意是叉乘,即外积).现在如果有另一个非标准的坐标系C2,其中心依然在原点不变,Z轴向量Cz2(a0,a1,a2),则其X轴向量Cx2 (假设为水平)可计算,Y轴向量Cy2也可计算出来,其中Cx2, Cy2 ,Cz2均为单位向量.如果要求C2坐标系上P(p0,,p1,p2)(C2坐标系下的点为P(1,2,3),PC2X轴距离为1,Y轴距离为2,Z轴距离为3)上的点在C1下的实际坐标,则直接将点P投影到C23个坐标轴上即可,所求点的坐标为: p0.Cx2+p1.Cy2+p2.Cz2  (注意,是点乘,即内积)

如下图中:标准坐标系为(X,Y,Z)黑色,新坐标系为(Cx2, Cy2 ,Cz2 )红色,所求点为P(p0,,p1,p2), PC2坐标系中Cx2, Cy2平面上投影点为P’,P’Cx2上的投影为M.向量OM长为|p0|,向量MP’长为|p1|,向量P’P长为|p2|,0M= p0.Cx2, MP= p1.Cy2, P’P= p2.Cz2,OP=OM+MP’+P’P= p0.Cx2+p1.Cy2+p2.Cz2,图中蓝色的线即为求OP的路径.

不同3D坐标系上的点的坐标变换的计算_第1张图片

(2) 下面讨论(1)的逆过程, 即一个标准坐标系上的点(实际值)在非标准坐标系上的值(相对值).求解过程是一样的,即求OPC2的三个坐标轴上的投影: p0.Cx2+p1.Cy2+p2.Cz2.可以验证,如果进行(1)(2),即将C2坐标系上的点投影到标准坐标系上,再将投影后的点还原为C2坐标系上,则点的坐标应该是不变的.可对点的X值验证:投影到标准坐标系上的点为P1,P1= p0.Cx2+p1.Cy2+p2.Cz2,再将P1还原到C2,即还原后的X值为: P1X*C2X=( p0.Cx2+p1.Cy2+p2.Cz2)* Cx2=p0 (因为Cx2*Cx2=1, Cx2* Cy2= 0, Cx2* Cz2= 0).同理可证明Y,Z.

(3) 对任二个坐标系(C3,C4)进行点的投影:可先将C3上的点P(p0,,p1,p2)投影到标准坐标系上的点P3,再将P3投影到P4,即相当于先做(1) 的转换,再做(2)的转换,最后所求点为P3=(p3x,p3y,p3z)= (p0.Cx3+p1.Cy3+p2.Cz3),P4= p3x* Cx4+ p3y.Cy4+ p3z.Cz4.

你可能感兴趣的:(不同3D坐标系上的点的坐标变换的计算)