如何在任意轴的框架中找到矢量的象限?

时间:2016-06-22 01:52:12

标签: c# vector cartesian-coordinates

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

谢谢,

约翰

1 个答案:

答案 0 :(得分: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&amp;&amp; SY&gt; = 90这是第一象限
  2. 如果SB> = 90&amp;&amp; SY&gt; = 90这是第二象限
  3. 如果SB> = 90&amp;&amp; SY <= 90这是第三象限
  4. 如果SB <= 90&amp;&amp; SY <= 90这是第四象限