2012-03-08 33 views
5

我遇到了一些基本的觸發有點麻煩。我正在做一些數學作業,終於感到厭倦了將直角座標轉換爲極座標,反之亦然,所以我決定掀起一個小小的Python程序來幫助我進行轉換。但是,Math.atan()給我帶來一些麻煩。下面的代碼:基本觸發: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報表的情況下,這是添加標號正確的角度爲象限直角座標是在第二象限是象限90度遠1,和象限3是象限1等

180度現在,如果我進入像(5, 5)值,一切正常。但是,如果我輸入(-5, 5),則得到的值爲7.07, 45,我應該得到7.07, 135。如果我輸入(-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

是的,這樣做,謝謝!爲等待道歉。 – 2012-03-08 21:58:31