我想计算两个线段A和B之间的顺时针角度。因此得到的角度必须在0到360-1度之间。我在SO中看到了所有其他答案,但他们给了我负面的角度。感谢。
答案 0 :(得分:2)
要在C#中将任意角度转换为0-359范围,您可以使用以下“算法”:
public int Normalise (int degrees) {
int retval = degrees % 360;
if (retval < 0)
retval += 360;
return retval;
}
C#遵循与C和C ++相同的规则,i % 360
将为{1}}和-359
之间的任何整数提供值,然后第二行是确保它在范围内0到359(含)。
一行中的偷偷摸摸的版本:
359
这将在所有条件下将其标准化。我不确定我是否担心使用内联单行,除非性能至关重要,但我将解释它。
从 degrees = ((degrees % 360) + 360) % 360;
开始,您将获得degrees % 360
和-359
之间的数字。添加359
会将范围修改为360
和1
之间的范围。然后,最终的729
会将其恢复到% 360
到0
的范围。
答案 1 :(得分:2)
我会尝试:
if degrees is between [-360, 360]
degrees = (degrees + 360) % 360;
else degrees = (degrees % 360) + 360) % 360;
答案 2 :(得分:1)
当然,您可以通过调整:
来调整任何负角度的解决方案,始终为0-360浮动正=(角度<0)? (360 +角度):角度