假设您想将 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 度。)