角度の大小を求める

id:srzw0326さんのトコにあったTwitterのログに

 弾の進行方向から敵の方向に右回りと左回りどっち回りの方が近いかを求めるのどうするんだっけ。360度をまたぐと面倒だ。 

とあったのを見て、自分も思い出せなかったのでした。

そういう時は自分のソースを見ればいいさ。

  inline int AngleCompare( int src, int dst ){ return ((src - dst) & 4095) - 2048; };

と、一行で書いてあった。(関数名はCompareAngleじゃねえのかなぁぁ)。ハイ判りません。文脈から察すると、dst > srcの時は0以上の値、dst <= srcの場合は負の値を返すみたい。

追記しておくと、角度は0〜4096を1周とする単位系を使ってるので、「2つの角度の差をとって、正規化(0〜2PIの範囲に収める)した後にPI(半周)を引いてる」もよう。何でこれでOKかは忘れた。誰か解説してください。