我有一个保持角度的变量,以度为单位,可以是正数也可以是负数。我现在需要确保这个数字只在 0 到 360 之间。数字是双倍的。
这样做的好算法是什么?简单地做角度 % 360 是行不通的,因为负数最终仍然是负数。奖励指向最小的算法(又名代码高尔夫)。
编辑
显然这在不同的语言中是不同的。在 ActionScript 和 JavaScript 中,取模将返回一个介于 +m 和 -m 之间的数字:
(-5) % 360 = -5
d = ((d % 360) + 360) % 360;
如果模数为您提供介于 -359 和 359 之间的值,则将起作用。
我个人会把它放在一个单独的函数中,因为它和罪一样丑陋。
def mymodulo(n,m):
return ((n % m) + m) % m;
对于代码高尔夫,29 个字符,包括 Python 中的换行符:
def f(n,m):return((n%m)+m)%m
并不是说 Python 真的需要它:(-5)%360
用那种语言给你 355 :-)
angle - 360 * floor(angle/360)
什么语言?模数也应该返回正数,
红宝石:
>> -5 % 360
=> 355
Python:
>>> -5 % 360
355
如果这不适用于任何语言,最简单的方法是添加或减去模右侧的数字,直到解决方案介于零和该数字(含)之间。