给定矩形的三个顶点,可以使用连接三个点的两个垂直单位向量和由这两个向量的叉积构造的第三个垂直单位向量来定义正交基。
然后,可以使用矩阵表示该基础,该矩阵的列包含三个单位向量:
对于标准WCS基础,该矩阵为:
该矩阵对将点从WCS平面变换到包含三个给定点的平面中的对应点所需的变换进行编码;(请注意,还需要平移向量来获得变换后平面中的正确高程和位置)。
通常,该矩阵是对对象从一个平面到另一个平面执行必要变换所需的全部,如本程序所示,例如[可能需要沼泽成员身份才能访问]。
然而,由于您正在寻找由矩阵在X、Y和Z轴中编码的旋转,我们可以将矩阵分解为三个旋转矩阵:
给定矩阵M,包含目标平面的基向量(相对于WCS平面表示):
我们可以通过X、Y和Z轴上的三个旋转来表示该矩阵,每个旋转分别由旋转矩阵M1、M2和M3编码:
(上面表示在X轴上旋转,然后在Y轴和Z轴上旋转)。
全文:
(这里,a1、a2和a3分别是围绕X、Y和Z轴的旋转角度)。
然后,我们可以通过将M预乘每个旋转矩阵的逆来分解矩阵,因为我们处理的是正交矩阵(即A·A^T=i),逆矩阵只是矩阵转置(A^T=A^1),因此:
因此,我们可以通过计算每个旋转矩阵编码的旋转角度来确定围绕每个轴的旋转,然后将基矩阵乘以该旋转的逆矩阵。
在代码中,这可能是:
上述函数需要三个点来定义“目标平面”(即矩形的三个顶点),并将返回从WCS平面(Z=0,0,1)绕平面的X、Y和Z轴的旋转。 |