2012-03-08 13 views
5

私は基本的なトリグに少し問題があります。私は数学の宿題をやっていますが、最終的に直角座標を極座標に変換することに飽きてしまいました。その逆もありますので、私は変換の手助けをするためにPythonの小さなプログラムを利用することにしました。しかし、Math.atan()は私に少し問題を与えています。ここでは、コードです:。基本trig:math.atan()問題

def rect_to_polar_input(x, y): 
    hypotenuse = math.sqrt((x * x) + (y * y)) 
    tangent = float(y/x); 
    angle = round(math.degrees(math.atan(tangent))); 

    if x <= 0: 
     if(y >=0): 
      angle += 90 

     if(y <= 0): 
      angle+= 180 

    if x >= 0: 
     if(y<0): 
      angle+=270 

    return hypotenuse, angle 

私はそこにそれらの不格好if文を持っているなぜあなたは迷っている場合は、それが長方形の座標はである象限の正しい角度を追加することだが第2象限90度離れクアドラントからです予想通り、私は(5, 5)のように値を入力した場合は1、および第3象限は、今などクアドラント1、

から180度であり、すべてが動作します。しかし、(-5, 5)と入力すると、になるはずの7.07, 45という値が得られます。 (-5, -5)と入力すると、7.07, 225という値が得られます。最後に、(5, -5)の値を入力すると、私はまだ7.07, 225の値を取得します。私は考えることができるすべてを試しましたが、うまくいきません。それで、私は何が欠けていますか?

答えて

12

これにはatan2を使用してください。必要に応じて四分円を正確に処理します。これと同じように:

def rect_to_polar_input(x, y): 
    hypotenuse = math.hypot(x, y) 
    angle = round(math.degrees(math.atan2(y, x))) 
    if angle<0: 
     angle += 360 
    return hypotenuse, angle 

if文は、範囲0..360で結果を望んでいるという事実に対処することですが、atan2は範囲-180..180に角度を与えます。

は、あなたが撮影してきた基本的なアプローチを使用してatanでこれを行うことができますが、かなりまだそれをデバッグしていませんでした。いずれにしても、誰もがこれにatan2を使用します。

また、あなたにもhypotを使用するのではなく、独自の圧延します。

+0

うん、それは、ありがとう!待ち合わせのための謝罪。 –