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语句.还有其他数学方法可以一次指出角度的象限吗?
编辑:我看到有很多好的答案.请允许我补充一下" 哪种算法最快? "
您可以使用模运算:
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)
利用整数算术:
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]。