現在、「Pi--angle」を使用してY軸に角度を反映しています。私が使用している角度システムはラジアンで、0が東、-Pi / 2が北、Pi / 2が南、+/- Piが西です。上記の方法を使用して角度を反映しようとすると、頻繁に発生します。範囲外のPiを超える値を返します。どうすればこれを防ぐことができますか?
ありがとう、
DLiKS
現在、「Pi--angle」を使用してY軸に角度を反映しています。私が使用している角度システムはラジアンで、0が東、-Pi / 2が北、Pi / 2が南、+/- Piが西です。上記の方法を使用して角度を反映しようとすると、頻繁に発生します。範囲外のPiを超える値を返します。どうすればこれを防ぐことができますか?
ありがとう、
DLiKS
x 軸についての反射: を使用するだけ-angle
です。
y 軸についての反射: 使用
if (angle >= 0)
return pi - angle
else
return -pi - angle
これにより、0 で分岐カットが作成されます。3° は 177° にマップされ、-3° は -177° にマップされます。0 は pi にマップされます。([-pi,pi) 間隔で +pi を除外する角度が必要な場合は、">=" を ">" に変更します。
問題文が示唆するように、これは入力角度が [-pi,pi] 範囲内にあることも前提としています。そうでない場合は、最初に対称モジュロ 2*pi (ここで) を使用して正規化する必要がありますsmod(x,M) = mod(x+M/2,M) - M/2
。
まず、初期角度を Pi でモジュロ除算します。したがって、C 言語では次のようになります。
angle = fmod(angle, 2*Pi);
if (angle < -Pi)
angle = angle + 2*Pi;
float inverted = Pi - angle;
問題は、さらに処理する前に常に入力を正規化することです。
完全な円は 2*pi であるため、常に 2*pi を減算して、角度を範囲内に戻すことができます。
なぜ北を -Pi/2 に選んだのか。単位円上の sin(angle) = y 座標のようなすべてのデフォルトの stuf を壊します。
しかし、質問に答えるために、すべての角度 (k は任意の整数) に k*2Pi を追加すると、角度は変わりません。