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

Kar*_*arl 7 algorithm trigonometry

首先,这可能听起来很微不足道,但是目前我正在创建一个函数getQuadrant(degree),用于从给定角度返回一个象限.

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

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

            while (angle < 0)
                angle = angle + 360;
            end
Run Code Online (Sandbox Code Playgroud)

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

编辑:我看到有很多好的答案.请允许我补充一下" 哪种算法最快? "

Vin*_*rat 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
Run Code Online (Sandbox Code Playgroud)


ami*_*mit 3

利用整数算术:

angle = angle - (angle/360)*360;
if (angle < 0) angle = angle + 360;
Run Code Online (Sandbox Code Playgroud)

这个想法是,因为angle/360向下舍入(floor()),(angle/360)所以给你k你需要做的事情alpha = beta + 360k

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