向量方向的变化

时间:2011-02-25 21:42:28

标签: math geometry 3d

给出两个指向不同方向的向量。我希望第一个矢量能够向第二个矢量改变方向的设定度数。计算这个新向量的公式或算法是什么。

例如,太空船(这是一个太空船模拟器)指向(2,3,3)的方向。现在船将在方向上改变方向20度(2,-3,-2)。新的载体是什么?它不是沿轴旋转,而是与两个矢量成直角。

3 个答案:

答案 0 :(得分:4)

假设您要将A旋转到B。

取十字产品AxB = C并将其标准化。

现在将A分为两个组成部分,一个与C平行,一个正常:

...

现在构造一个垂直于A和C的向量(具有正确的意义):

...

现在你可以构造旋转的矢量:

...

修改
我觉得自己像个白痴。正确(和更简单)的推导是

F = C x A

G = cos(theta) A + sin(theta) F

修改:
这适用于简单的几何。 C是包含A和B的平面的法线.F在平面中,并且与A垂直。因此,平面中的任何矢量都是A和F的线性组合;也就是说,平面中的任何向量Z可以被构造为Z = aA + bF,其中a和b是数字,并且任何这样的和将在平面中。 F也与A具有相同的大小,所以如果我们构造

G = cos(theta) A + sin(theta) F

我们得到的是具有相同幅度的矢量,但是与A分开角度θ。 (这不是很明显,但如果你稍微玩一下,你会发现它有效。)

使用您的示例:

A = (2, 3, 3) (magnitude = 4.69)
B = (2, -3, -2)
C = AxB = (3, 10, -12) (magnitude = 15.906)

Now normalize:
C = (0.189, 0.629, -0.754) (magnitude = 1.0)

F = CxA = (4.149, -2.075, -0.692) (magnitude = 4.69)

theta = 20 degrees
G = cos(theta) A + sin(theta) F = (3.299, 2.109, 2.583) (magnitude = 4.69)

G与A和B处于同一平面(垂直于C),A和G之间的角度为20度。 (A和B之间的角度为124.7度,G和B之间的角度为104.7度。)

答案 1 :(得分:3)

取两个向量的叉积得到与它们垂直的向量。

然后你可以围绕那个向量旋转。

答案 2 :(得分:1)

您必须首先计算旋转矢量,例如:

Vector3 axis = crossProduct(Vector3(2,3,3), Vector3(2,-3,-2));

然后使用旋转矩阵沿着该轴旋转。