2

現在、「Pi--angle」を使用してY軸に角度を反映しています。私が使用している角度システムはラジアンで、0が東、-Pi / 2が北、Pi / 2が南、+/- Piが西です。上記の方法を使用して角度を反映しようとすると、頻繁に発生します。範囲外のPiを超える値を返します。どうすればこれを防ぐことができますか?

ありがとう、

DLiKS

4

4 に答える 4

5

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

于 2010-12-29T18:26:01.663 に答える
2

まず、初期角度を Pi でモジュロ除算します。したがって、C 言語では次のようになります。

angle = fmod(angle, 2*Pi);
if (angle < -Pi)
    angle = angle + 2*Pi;

float inverted = Pi - angle;

問題は、さらに処理する前に常に入力を正規化することです。

于 2010-12-29T18:29:36.000 に答える
0

完全な円は 2*pi であるため、常に 2*pi を減算して、角度を範囲内に戻すことができます。

于 2010-12-29T18:27:00.030 に答える
0

なぜ北を -Pi/2 に選んだのか。単位円上の sin(angle) = y 座標のようなすべてのデフォルトの stuf を壊します。

しかし、質問に答えるために、すべての角度 (k は任意の整数) に k*2Pi を追加すると、角度は変わりません。

于 2010-12-29T18:31:07.060 に答える