2

正と負の両方の角度を度単位で保持する変数があります。この数値が 0 から 360 の間のみであることを確認する必要があります。数は倍です。

それを行うための優れたアルゴリズムは何でしょうか? angle % 360 を実行するだけでは機能しません。負の数は依然として負になるからです。最小のアルゴリズム (別名、コード ゴルフ) へのボーナス ポイント。


編集

どうやらこれは言語によって異なるようです。ActionScript と JavaScript では、モジュロは +m と -m の間の数値を返します。

(-5) % 360 = -5
4

3 に答える 3

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

modulo が -359 から 359 の間の値を与える場合に機能します。

これは罪と同じくらい醜いので、個人的には別の関数に入れたいと思います。

def mymodulo(n,m):
    return ((n % m) + m) % m;
  • 最初のモジュロは、-359 から 359 までの値を提供します。
  • 足し算は、それを 1 から 719 の間の何かにぶつけます。
  • 2 番目のモジュロは、0 から 359 までの範囲に戻します。

コード ゴルフの場合、Python の改行を含む 29 文字:

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

何語?Modulo も正の値を返す必要があります。

ルビー:

>> -5 % 360
=> 355

パイソン:

>>> -5 % 360
355

これがどの言語でも機能しない場合、最も簡単な方法は、モジュロの右側にある数値を加算または減算して、解がゼロとその数値の間に収まるようにすることです。

于 2009-11-16T03:30:03.863 に答える