**关于三维坐标变换的一些思考。 **
从两条相交直线说起。
从最简单的情况入手,求空间两条相交直线AB、BC的夹角,AB和BC相交于B点,已知ABC三点三维坐标。
假设两条直线向量分别为a(x1,y1,z1),b(x2,y2,z2),根据公式cosα=a·b/(|a|*|b|)=(x1x2+y1y2+z1z2)/[√(x12+y12+z12)+√(x22+y22+z22)] 可直接求得。
情况变一变:
以此两条直线中的某一条为基准(为z’轴),求另一条直线关于基准线的x’、y’、z’轴(新的基准坐标系)夹角。
如果不用矩阵的做法,求解很复杂:
以AB为新的坐标系Z’轴为例,O为原坐标系原点。
B’(0,0,0),可求AB点距离s,则A’(0,0,s)。这还是比较容易的,关键是求C’坐标。
首先要求z轴和AB之间的各种角度,想象从Z轴先延x轴平移绕x轴旋转,再延y轴平移绕y轴旋转,最后延z轴平移绕z轴旋转。同理,C点做同类运动,得到C’。
千辛万苦得到C’还没完,再将B’C’分别向x’o’y’、y’o’z’、z’o’x’面投影,求关于基准线的夹角。方可算出所求。
很明显,这种方法显然不适用在3D中。
这个问题其实等价于将世界坐标系转换为物体坐标系。,矩阵的作用就发挥广大。
令原坐标系为M=(i,j,k)T(转置),变换后N=(i’,j’,k’)T,i=(1,0,0),j=(0,1,0),k=(0,0,1)
原坐标系中一点P为(x,y,z),则P’=((x,y,z)-O’)N^(-1) N^(-1)指N的逆矩阵 (若N为正交矩阵,无需求逆矩阵,求转置矩阵即可。)
推导:∵P=O+(x,y,z)M=O’+(x’,y’,z’)N
∴(x’,y’,z’)=((x,y,z)M+(O-O’))N^(-1)
此时O’=(0,0,0),并带入M,则上式得证。
综上所述,讨论的情况实质就是进行了坐标系的转换。目的是求C’坐标,假设A(a1,b1,c1),B(a2,b2,c2),C(a3,b3,c3),那么根据公式C’=((a3,b3,c3)-(a2,b2,c2))N(-1),问题就转化为求N。记N=MK,K=M(-1)N,也就是说,K是将i,j,k装换为i’,k’,j’的变换矩阵。
N(-1)=(MK)(-1)=K(-1)M(-1)
∴(x’,y’,z’)=((x,y,z)M+(O-O’))K(-1)M(-1)
=((x,y,z)+(-O’))K^(-1) K=N
怎么求K呢?
可以参考这篇文章图形学1-三维坐标系间的变换矩阵推导
看似也挺麻烦,其实推导占据了大量篇幅,真正使用时直接套就好了。