获得角度当前象限的最快方法

时间:2012-12-20 15:48:06

标签: algorithm trigonometry

首先,这听起来非常简单,但目前我正在创建一个函数getQuadrant(degree),用于从给定角度返回一个象限。

例如,如果degree是> = 0且<在90,它将返回1.如果度是> = 90并且< 180,它将返回2.依此类推。这非常简单。但是,为了能够处理0-360以外的度数,我首先简单地将这些数字归一化为0-360度范围,如下所示:

            while (angle > 360)
                angle = angle - 360;
            end

            while (angle < 0)
                angle = angle + 360;
            end

之后,我计算。但坦率地说,我讨厌使用像这样的while语句。还有其他数学方法可以一次指出角度的象限吗?

编辑:我看到有很多好的答案。请允许我添加“哪种算法最快?

4 个答案:

答案 0 :(得分:6)

您可以使用模运算:

angle %= 360.0; // [0..360) if angle is positive, (-360..0] if negative
if (angle < 0) angle += 360.0; // Back to [0..360)
quadrant = (angle/90) % 4 + 1; // Quadrant

答案 1 :(得分:3)

利用整数算术:

angle = angle - (angle/360)*360;
if (angle < 0) angle = angle + 360;

我们的想法是,由于angle/360向下舍入(floor()),(angle/360)会为您提供k您需要做的alpha = beta + 360k

如果需要,第二行从[-359,-1]标准化回[1,359]。

答案 2 :(得分:3)

(angle/90)%4+1

假设:

  1. angle是一个整数
  2. angle是积极的
  3. /是整数除法
  4. 对于负角度,您需要一些额外的处理。

答案 3 :(得分:1)

你已经标记了你的问题 trigonometry 所以这里有一些三角函数:

a)采取sin(theta)cos(theta) - 包含360°的多少(正或负)倍数并不重要; sin(400°)==sin(40°)==sin(-320°)

b)如果sin(theta)>0cos(theta)>0 theta位于象限1

如果sin(theta)>0cos(theta)<0 theta位于象限2

等等。哦,并决定在corners sincos返回0的4 {{1}}处做什么。