您可以将矩阵分解为基本变换:平移,缩放和旋转。给定这个矩阵:M=TRS
M=⎡⎣⎢⎢⎢a00a10a200a01a11a210a02a12a220a03a13a231⎤⎦⎥⎥⎥
您可以使用最后一列。t=(a03,a13,a23)
对于缩放,我们知道矩阵的前三列对应于基数(轴)。我们可以通过这些向量的长度/范数来获得比例,即缩放了多少个碱基。因此比例为其中:s=(s0,s1,s2)
s0=∥(a00,a10,a20)∥s1=∥(a01,a11,a21)∥s2=∥(a02,a12,a22)∥
现在您有了刻度,您可以使用与R S对应的子矩阵来去除刻度,方法是将矩阵乘以刻度S − 1的倒数来获得R3×3RSS−1[R
(R S )S− 1= ⎡⎣⎢一种00一种10一种20一种01一种11一种21一种02一种12一种22⎤⎦⎥⎡⎣⎢s0000s1个000s2⎤⎦⎥− 1= ⎡⎣⎢一种00一种10一种20一种01一种11一种21一种02一种12一种22⎤⎦⎥⎡⎣⎢1 / 秒00001 / 秒1个0001 / 秒2⎤⎦⎥
因此((R S )S− 1= R I = R):
R = ⎡⎣⎢一种00/ 秒0一种10/ 秒0一种20/ 秒0一种01/ 秒1个一种11/ 秒1个一种21/ 秒1个一种02/ 秒2一种12/ 秒2一种22/ 秒2⎤⎦⎥
这是最终的旋转矩阵。您可以使用多种方法进一步分解它。不再冗长,但您可以搜索分解旋转矩阵。
该方法仅给出平移,缩放和旋转形式的等效值(原始矩阵可能是其他类型的转换的结果)。如果您进一步使用分解角度,则旋转角度的浮点精度可能会出现问题,在计算中可能会累积舍入误差。除非您自己没有构造矩阵,否则不要使用它。
Ťs[RŤ ř 小号