我有两个归一化向量:A) 0,0,-1 B) 0.559055,0.503937,0.653543
我想知道,将向量从 0,0,-1 带到 0.559055,0.503937,0.653543 需要绕轴旋转多少?
我将如何计算这个?例如,在 X 轴 40 度和 Y 轴 220 上旋转(这只是示例,但我不知道该怎么做)。
看看这个。(谷歌是个好东西)
这会计算两个向量之间的角度。如果向量 A 是 (ax, ay, az) 而
向量 B 是 (bx, by, bz),那么
它们之间的角度余弦为:
(ax*bx + ay*by + az*bz)
--------------------------------------------------------
sqrt(ax*ax + ay*ay + az*az) * sqrt(bx*bx + by*by + bz*bz)
要计算投影到 xy 平面上的两个向量之间的角度,只需忽略 z 坐标。
xy 平面内角的余弦 =
(ax*bx + ay*by)
--------------------------------------
sqrt(ax*ax + ay*ay) * sqrt(bx*bx + by*by
同样,要计算两个向量在 xz 平面中的投影之间的角度,请忽略 y 坐标。
听起来您正在尝试将笛卡尔坐标 (x,y,z) 转换为球坐标 (rho,theta,psi)。
由于它们都是单位向量,因此半径rho将为 1。这意味着您的大小也将为 1,您可以跳过整个分母而只使用点积。
对于您的第一个示例 (0,0,-1),在 X/Y 平面(围绕 Z 轴)旋转将非常困难,因为它在 X 或 Y 上没有延伸。所以没有什么可以旋转的。
(0,0,-1) 与 (1,0,0) 或 (0,1,0) 成 90 度。如果将 x 轴作为 theta 的 0 角,则通过在( x,y,z) 和 (x,y, 0),然后您可以跳过点积并使用 atan2(y,x) 获得 theta(x/y 旋转)。
当心万向节锁可能会导致问题。