我有三个正交归一化向量BASE,SEARCH和AXIS
AXIS是轴向量
BASE是一个参考向量,不会改变该过程。
SEARCH是一个向量,相对于BASE的值,它将在0到2 pi的范围内变化
我想要的是获得BASE和SEARCH之间的角度
我知道如何获得0到pi范围内的角度
如果这些是2d坐标,我可以使用atan2()并添加2 pi,如果值为负但我不知道如何在一般的3d情况下这样做。
如果这些矢量是2d且矢量BASE是X轴,我可以使用SEARCH的象限来确定正确的范围。
我需要这个功能
float AngleBetween(Vector3 Axis, Vector3 Base, Vector3 Search) {
// use cross and dot to get 0 to pi angle
// get quadrant of Search
// adjust angle based on quadrant
}
谢谢,
约翰
答案 0 :(得分:0)
我想出了办法。
由于基矢量没有移动,我可以称之为X 2d轴。
由于我有一个3d轴矢量,我可以围绕它旋转。我所做的是通过围绕3d轴顺时针旋转基本矢量90度来创建负y 2d轴的等价物。
然后我有三个向量,搜索向量,基本向量(x 2d轴)和-y 2d轴。
我计算两个角度,一个在搜索矢量和基矢量(x 2d轴)之间,一个在搜索矢量和-y 2d轴之间。
然后我有足够的数据来确定象限,因为两者之间的角距离将以0和pi之间的独特方式变化。
如果SB是搜索和基矢量之间的角度,SY是搜索和-Y(2d轴)之间的角度,那么在右手系统中(角度逆时针方向变大)规则是