【发布时间】:2010-07-05 01:41:39
【问题描述】:
我想计算两条线段 A 和 B 之间的顺时针角度。所以得到的角度必须在 0 到 360-1 度之间。我在 SO 中看到了所有其他答案,但他们给了我负面的角度。谢谢。
【问题讨论】:
标签: c# geometry drawing 2d computational-geometry
我想计算两条线段 A 和 B 之间的顺时针角度。所以得到的角度必须在 0 到 360-1 度之间。我在 SO 中看到了所有其他答案,但他们给了我负面的角度。谢谢。
【问题讨论】:
标签: c# geometry drawing 2d computational-geometry
为了在C#中将任意角度变成0-359范围,可以使用以下“算法”:
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 的范围内。
【讨论】:
我会尝试:
if degrees is between [-360, 360]
degrees = (degrees + 360) % 360;
else degrees = (degrees % 360) + 360) % 360;
【讨论】:
当然,您可以通过调整将任何具有负角的解决方案调整为始终为 0-360:
浮点数 = (角度
【讨论】: