unity3d
之计算两向量的旋转角
向量的点乘和叉乘都是很有用的数学工具,不过他们也有局限性。关键是向量点乘
可以得到两个向量之间的夹角,
而不是旋转角,
这个角度是没有方向的,
范围是
[0-pi]
,
而
这往往不是我们想要的,
实际问题中我们常常要计算从向量
p1
沿逆时针方向转到与向量
p2
方向一致的确切角度,我把这个角度定义为旋转角。
旋转角的计算既需要夹角,还需要
两个向量的叉乘,
以确定
p1
和
p2
的角度方向关系。
关于叉乘符号与向量的角度方向关系,请参考《算法导论》,我只给出结论
:
p1 * p2 = x1y2
- x2 y1 = -p2 * p1
If p1 * p2 is positive, then p1 is clockwise from p2 with respect to the origin (0, 0); if
this cross product is negative, then p1 is counterclockwise
from p2.
另外考虑的是共线(
collinear
)的问题,
arcsine
很难处理这个问题,
不过
arecosine
却
能够明确的区分
0
和
pi
,因此作为特殊情况提前得出结论。
代码如下:文章出处