角度を正規化するソースコード

メモ。正規化する関数は無限ループで止まる可能性があるので注意です。
(追記:こちらの雑記で修正版を書きました

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;
}

間違っているかもしれません。