首先,这听起来非常简单,但目前我正在创建一个函数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语句。还有其他数学方法可以一次指出角度的象限吗?
编辑:我看到有很多好的答案。请允许我添加“哪种算法最快?”答案 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
假设:
angle
是一个整数angle
是积极的/
是整数除法对于负角度,您需要一些额外的处理。
答案 3 :(得分:1)
你已经标记了你的问题 trigonometry 所以这里有一些三角函数:
a)采取sin(theta)
和cos(theta)
- 包含360°
的多少(正或负)倍数并不重要; sin(400°)==sin(40°)==sin(-320°)
等
b)如果sin(theta)>0
和cos(theta)>0
theta位于象限1
如果sin(theta)>0
和cos(theta)<0
theta位于象限2
等等。哦,并决定在corners
sin
和cos
返回0
的4 {{1}}处做什么。