web-dev-qa-db-ja.com

sin / cos変換から角度を取り戻す

sin/cos操作を逆にして角度を戻したいのですが、何をすべきかわからないのです。

ラジアン単位の角度でsincosを使用して、x/yベクトルを次のように取得しました。

double angle = 90.0 * M_PI / 180.0;  // 90 deg. to rad.
double s_x = cos( angle );
double s_y = sin( angle );

s_xおよびs_y、角度を取り戻すことはできますか? atan2は使用する関数でしたが、期待した結果が得られません。

18
Eric Fortier

atan2(s_y, s_x)は正しい角度を与えるはずです。 s_xs_yの順序を逆にした可能性があります。また、acos関数とasin関数をそれぞれs_xs_yで直接使用することもできます。

18
Masked Man

acos関数を使用して、指定されたs_x余弦から角度を取得します。しかし、いくつかの角度が同じ余弦になる可能性があるため(たとえば、cos(+ 60°)= cos(-60°)= 0.5)、s_xから直接角度を取得することはできません。したがって、角度の符号を取得するためにs_yの符号も使用します。

// Java code
double angleRadian = (s_y > 0) ? Math.acos(s_x) : -Math.acos(s_x);
double angleDegrees = angleRadian * 180 / Math.PI;

(s_y == 0)の特定のケースでは、角度が0°(+ 0°または-0°は同じ角度)または180°(+180 °または-180°は同じ角度です)。

8
Arnaud SmartFun

数学では罪と余弦の逆演算です。これはアークシンとアークコスです。あなたが使っているプログラミング言語はわかりません。しかし、通常それがcosおよびsin関数を持っている場合、それは逆の関数を持つことができます。

3
newman

asin(s_x)、acos(s_y)、おそらく、cを使用している場合。

2
Pheu Verg