角度を正規化するソースコード
メモ。正規化する関数は無限ループで止まる可能性があるので注意です。
(追記:こちらの雑記で修正版を書きました)
float RadianNormalize(float rad) { float d; if (rad > 0) d = -PI * 2; else d = PI * 2; // ラジアンを正規化する while (!(0.0 <= rad && rad < PI * 2)) rad += d; return rad; }
ついでに上記のものを使って、角度の差を出すソース。
float DiffRadian(float src0, float src1) { float rad = 0.0f; // ラジアンを正規化する src0 = RadianNormalize(src0); src1 = RadianNormalize(src1); // 差を計算する if (src0 < src1) rad = src1 - src0; else rad = src0 - src1; return rad; }
間違っているかもしれません。