3

我想计算两条线段 A 和 B 之间的顺时针角度。所以得到的角度必须在 0 到 360-1 度之间。我在 SO 中看到了所有其他答案,但他们给了我负面的角度。谢谢。

4

3 回答 3

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将为您提供一个介于-359和之间359的任何整数的值,然后第二行是确保它在 0 到 359 的范围内。

一行的鬼鬼祟祟的版本:

    degrees = ((degrees % 360) + 360) % 360;

这将在所有条件下使其正常化。除非性能很关键,否则我不确定我是否会过于担心使用内联单线,但我解释一下。

degrees % 360,您将得到一个介于-359和之间的数字359。添加360会将范围修改为介于1和之间729。然后决赛% 360将把它带回范围0通过359

于 2010-07-05T02:02:38.993 回答
2

我会尝试 :

if degrees is between [-360, 360]
    degrees = (degrees + 360) % 360;
else degrees = (degrees % 360) + 360) % 360;
于 2011-03-31T10:00:55.260 回答
1

当然,您可以通过调整将任何具有负角的解决方案调整为始终为 0-360:

浮动正=(角度<0)?(360 + 角度) : 角度

于 2010-07-05T01:45:41.157 回答