向量方向的改变

use*_*589 2 math 3d geometry

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

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

Bet*_*eta 5

假设您想将 A 旋转到 B。

取叉积 AxB = C 并将其归一化。

现在将 A 分成两个分量,一个平行于 C,另一个正常:

...
Run Code Online (Sandbox Code Playgroud)

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

...
Run Code Online (Sandbox Code Playgroud)

现在您可以构建旋转向量:

...
Run Code Online (Sandbox Code Playgroud)

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

F = C x A

G = cos(theta) A + sin(theta) F
Run Code Online (Sandbox Code Playgroud)

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

G = cos(theta) A + sin(theta) F
Run Code Online (Sandbox Code Playgroud)

我们得到的是一个大小相同但与 A 相隔一个角度 theta 的向量。(这不是很明显,但如果你稍微尝试一下,你会发现它是有效的。)

使用您的示例:

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)
Run Code Online (Sandbox Code Playgroud)

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