1

我有三个正交归一化向量 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
}

谢谢你,

约翰

4

1 回答 1

0

我想出了一个办法。

由于基向量不移动,我可以将其称为 X 2d 轴。

因为我有一个 3d 轴矢量,所以我可以围绕它旋转。我所做的是通过围绕 3d 轴顺时针旋转基本向量 90 度来创建负 y 2d 轴的等效项。

然后我有三个向量,搜索向量、基本向量(x 2d 轴)和 -y 2d 轴。

我计算两个角度,一个在搜索向量和基本向量(x 2d 轴)之间,一个在搜索向量和 -y 2d 轴之间。

然后我有足够的时间来计算象限,因为两者之间的角距离将以独特的方式在 0 和 pi 之间变化。

如果 SB 是搜索和基本向量之间的角度,SY 是搜索和 -Y(2d 轴)之间的角度,那么在右手系统中(角度逆时针变大),规则是

  1. 如果 SB <= 90 && SY >= 90 这是第一象限
  2. 如果 SB >= 90 && SY >= 90 这是第二象限
  3. 如果 SB >= 90 && SY <= 90 这是第三象限
  4. 如果 SB <= 90 && SY <= 90 这是第四象限
于 2016-06-22T16:15:11.497 回答