1

私はプロジェクトに取り組んでいます。ここで使用されるすべての変数は double として格納されます。問題は、両方の座標を持つ 2D 速度ベクトルがあり、ベクトルと OX 軸の間の角度を計算したいので、 を使用することTheta1 = atan(v1y / v1x);です。それでも、このアプローチでは、-PI/2 の間の角度しか取得できません。PI / 2なので、追加した範囲を拡張するために

#define PI 3.14159265358979323846
double Theta1;
Theta1 = atan(v1y / v1x);
if (v1x < 0.0)
    if (v1y > 0.0)
        Theta1 = Theta1 + (PI/2.0);
    else
        Theta1 = Theta1 - (PI/2.0);
else;

Theta1 then を使用しようとすると、最初の if 操作で変更されないようです。(+/-)PI/2.0 を追加することはありませんが、試してみると

cout << Theta + PI/2.0 << endl;

Theta1 modified を出力します。私は何を間違っていますか?落とし穴があるか、単純なものが見えないだけのようです。

4

2 に答える 2

4

接線の周期はπであるため、調整が正しくありません。正しくなければなりません±π。そのままで、両方の座標が負の場合、商と の結果はatan正になり、 と の間の値に0なりπ/2ます。次に、 と の間で負の値を減算して取得しますが、幾何学的にはとπ/2の間で負の値を取得する必要があります。-π/20-π/2

また、atan2調整なしで正しい角度が得られる を使用する必要があります。

于 2013-06-14T22:29:51.257 に答える