围绕它的局部z轴旋转一个物体,直到它的局部x轴落入一个特定的平面

时间:2017-09-07 14:26:43

标签: 3d rotation

我在3D空间工作(Blender,Python)。

我有一个任意旋转的对象。我需要旋转它,因此局部x轴垂直于给定的轴(想象一个平面,x轴可以是任何东西,只要它是该平面的方向矢量)。现在我需要围绕它的局部z轴旋转对象 (冻结另外两个)直到局部x轴与平面对齐。

现在我近似然后使用while循环,在局部z周围旋转一小部分直到它适合,但我确定有一个数学解决方案。解决方案不需要是python,数学描述应该可以正常工作。

1 个答案:

答案 0 :(得分:0)

将对象的旋转(3x3矩阵)设为R,将世界帧中的平面(单位)法线设为n'。要计算对象的本地帧n中的变换法线,请将R(=转置)的倒数应用于n'。在本地框架中工作更方便:

full fiddle

w是“所需的”X轴。它是 parallel 反并行n ^ z,其中^交叉产品。由于有两种解决方案(w-w),因此我们将在此实例中选择正解。

在我们做其他事情之前,我们需要检查n是否与z共线。如果是,则x轴已经在平面中(此外,w会有无限多的解),我们可以立即返回。我们通过计算nz点积来实现此目的。如果这接近于1或-1(在某些EPSILON内,取决于您的浮点格式),那么它们是共线的。

一旦我们有w,我们就可以将问题减少到2D:

![enter image description here

要获得角度θ(围绕局部Z轴旋转),标准化 w,并取{的点积的反余弦值{1}}和w

但是,我们还需要知道旋转的方向(在与Z相反的方向观察时顺时针或逆时针)。但这很简单 - 如果x然后逆时针旋转,则顺时针旋转(更改w.Y > 0的符号)。

最后,我们可以计算要应用的旋转矩阵,

enter image description here

使用原始旋转矩阵

后乘θ,我们就完成了。