我想计算两条线段A和B之间的顺时针角度。因此,结果角度必须在0到360-1度之间。我看到了SO上的所有其他答案,但它们给了我负角度。谢谢。
我想计算两条线段A和B之间的顺时针角度。因此,结果角度必须在0到360-1度之间。我看到了SO上的所有其他答案,但它们给了我负角度。谢谢。
if degrees is between [-360, 360]
degrees = (degrees + 360) % 360;
else degrees = (degrees % 360) + 360) % 360;
public int Normalise (int degrees) {
int retval = degrees % 360;
if (retval < 0)
retval += 360;
return retval;
}
C#遵循与C和C++相同的规则,i % 360
将为任何整数提供一个介于-359
和359
之间的值,然后第二行是为了确保它在0到359的范围内。
一个狡猾的一行版本:
degrees = ((degrees % 360) + 360) % 360;
这将使其在所有情况下都得到规范化。除非性能至关重要,否则我不确定是否需要过多担心使用内联单行代码,但是我会进行解释。
从degrees % 360
中,您将获得一个介于-359
和359
之间的数字。添加360
将修改范围为1
到729
。然后最终的% 360
将使其回到0
到359
的范围内。
你可以通过调整以下代码,将任何带有负角度的解决方案适应为始终为0-360:
float positive = (angle < 0) ? (360 + angle) : angle