0

問題に入る前に、いくつかのことを指摘したいと思います。1)cmathライブラリにすでにatan2関数があることを知っています。これは純粋に演習として、そして私自身の練習のためです。2)私はそれを知っています。コードは0を考慮していません。

わかりました。tan(theta)= y / xです。ここで、yとxは平面上の座標です...つまり、次のようになります。

シータ=クワッドIおよびIVではatan(y / x)、クワッドIIおよびIIIではシータ= atan(y / x)+ 180

では、なぜ次のコードを使用するのですか?

float atan(float y, float x)
 {
 float result = 0.0f;

if (x > 0) //quads I and IV if x is positive
 { 
result = atanf(y/x);
 }
 else if (x < 0)
 {
 result = atan(y/x) + 180; //quads II and III if x is negative
 }

return result;

 }

それは私にがらくたを吐きますか?たとえば、座標(-4,4)の場合、次の結果が得られます:179.215、135である必要がある場合:

atan(4 / -4)=-45度+180度=135度

しかし、何が起こっているのかはコンピューティングです

atan(4.0f / -4.0f)= -0.785398+180度=179.215。

私はここでいくつかのステップを逃していますか?

4

3 に答える 3

11

標準のatanおよびatan2関数、および角度で機能する他のすべてのC関数は、度ではなくラジアンで機能します。

独自の関数で度を出力する場合は、atanfからの戻り値に180/pi;を掛ける必要があります。すべてをラジアンで保持するには、180の代わりにpiを追加します。

于 2012-07-14T14:59:30.343 に答える
3

アタンは度ではなくラジアンで話します...

于 2012-07-14T14:57:25.993 に答える
3

atan結果をラジアンで返します。度=180*ラジアン/πで度に変換できます。

于 2012-07-14T14:58:30.630 に答える