2

我有一个保持角度的变量,以度为单位,可以是正数也可以是负数。我现在需要确保这个数字只在 0 到 360 之间。数字是双倍的。

这样做的好算法是什么?简单地做角度 % 360 是行不通的,因为负数最终仍然是负数。奖励指向最小的算法(又名代码高尔夫)。


编辑

显然这在不同的语言中是不同的。在 ActionScript 和 JavaScript 中,取模将返回一个介于 +m 和 -m 之间的数字:

(-5) % 360 = -5
4

3 回答 3

3
d = ((d % 360) + 360) % 360;

如果模数为您提供介于 -359 和 359 之间的值,则将起作用。

我个人会把它放在一个单独的函数中,因为它和罪一样丑陋。

def mymodulo(n,m):
    return ((n % m) + m) % m;
  • 第一个模数为您提供从 -359 到 359 的值。
  • 加法将其提高到 1 到 719 之间。
  • 第二个模数将其带回到您想要的范围,0 到 359。

对于代码高尔夫,29 个字符,包括 Python 中的换行符:

def f(n,m):return((n%m)+m)%m

并不是说 Python 真的需要它:(-5)%360用那种语言给你 355 :-)

于 2009-11-16T03:30:21.110 回答
3
angle - 360 * floor(angle/360)
于 2009-11-16T03:32:22.103 回答
0

什么语言?模数也应该返回正数,

红宝石:

>> -5 % 360
=> 355

Python:

>>> -5 % 360
355

如果这不适用于任何语言,最简单的方法是添加或减去模右侧的数字,直到解决方案介于零和该数字(含)之间。

于 2009-11-16T03:30:03.863 回答