给定两个指定方向的三维旋转

本文关键字:方向 旋转 三维 两个 | 更新日期: 2023-09-27 18:20:01

我有两个垂直的单位向量,p和q;我认为它嵌入了三维空间中的某个刚性物体中。我希望旋转对象,使p现在指向正x轴,q指向正y轴。

我正在用c#编程,并使用四元数来计算旋转。如何创建将执行所需旋转的四元数?

给定两个指定方向的三维旋转

如果你想象四元数的逆运算,那么你知道点(1,0,0)到p,(0,1,0)到q。类似地,点(0,0,1)到z,等于p和q的叉积。

因此,你实际上有逆旋转的矩阵表示。第一列是p,第二列是q,第三列是p交叉q。

因此,你想要的旋转矩阵是由这个矩阵的转置给出的,即第一行是p,第二行是q,第三行是p交叉q。

所以我建议你简单地调用一个库例程,将这个矩阵转换为四元数形式

您可能对这篇关于Doom3的文档感兴趣,该文档解释了用于将矩阵转换为四元数的算法Id软件,包括优化的x86汇编代码。

正交矩阵

如果我们有一个矩阵M,其中列(a,b,c)形成正交集,那么我们知道a=b'b=c'c=1,a'b=…=c’a=0。

因此Mm=I.

如果我们在左边乘以M,在右边乘以inv(M),我们会发现:

M.M'.M.inv(M) = M.inv(M)
=> M.M'.(M.inv(M)) = M.inv(M) = I
=> M.M' = I

所以,如果我们有正交列,我们必须也有正交行,矩阵M被称为正交矩阵。