逆関数を計算していると思います間違って奇妙なことに私を驚かせた方法で。asin
逆sinと逆cosに使用する必要がありますacos
。関数の逆数ではなく、乗法の逆数を計算しています。ここでも同じように見えます。
関数を使用しatan2()
ます。y値とx値から角度が得られます。逆sinと逆cosを暗黙的に計算し、yとxの両方の符号をチェックして正しい象限を検出します。
ATAN2(3)
名前
1.8 `atan2'、` atan2f'--y/xのアークタンジェント
概要
#含む
double atan2(double Y、double X);
float atan2f(float Y、float X);
説明
`atan2'は、Y / Xの逆タンジェント(アークタンジェント)を計算します。`atan2 '
pi/2または-pi/2に近い角度でも正しい結果を生成します(
つまり、Xが0に近い場合)。
`atan2f'は`atan2'と同じですが、`float'を取得して返すことを除けば。
戻り値
`atan2'と`atan2f'は、ラジアンで-piからpiの範囲の値を返します。
明らかにローテーションの一部ではない2.07814を無視していると思います。atan2(0.587785, -0.809017)
私に144.0度を与えます。atan(-0.587785, -0.809017)
216.0を与えます。
あはは!あなたのマトリックスは、私が慣れているものから「横向き」です。2.07814の部分は単なる翻訳だと思います。この3D回転行列をガイドとして使用して、
1 0 0
0 cos sin
0 -sin cos
...以前と同じように私を混乱させます。私は144.0を取得し続けます。
告白。
Cの代わりにPostscriptを使用したため、上記のラジアン/度の問題について詳しく説明しました。
$ gsnd -q
GS>0.587785 -0.809017 atan =
144.0
GS>-0.587785 -0.809017 atan =
216.0
GS>