我有一个变量,它保持一个角度,以度为单位,可以是正数也可以是负数。我现在需要确保此数字仅在0到360之间。这个数字是双倍的。
这样做的好算法是什么?简单地做角度%360不起作用,因为负数最终仍然是负数。奖金指向最小的算法(又名Code Golf)。
显然,这在不同的语言中是不同的。在ActionScript和JavaScript中,modulo将返回+ m和-m之间的数字:
(-5) % 360 = -5
答案 0 :(得分:3)
d = ((d % 360) + 360) % 360;
如果modulo为您提供介于-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: - )
答案 1 :(得分:3)
angle - 360 * floor(angle/360)
答案 2 :(得分:0)
用什么语言? Modulo也应该返回正面,
红宝石:
>> -5 % 360
=> 355
的Python:
>>> -5 % 360
355
如果这不能用于任何语言,最简单的方法是在模数的右侧添加或减去数字,直到解决方案介于零和包含该数字之间。