给出两个指向不同方向的向量。我希望第一个矢量能够向第二个矢量改变方向的设定度数。计算这个新向量的公式或算法是什么。
例如,太空船(这是一个太空船模拟器)指向(2,3,3)的方向。现在船将在方向上改变方向20度(2,-3,-2)。新的载体是什么?它不是沿轴旋转,而是与两个矢量成直角。
答案 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));
然后使用旋转矩阵沿着该轴旋转。