2014-03-12 42 views
0

我再次。我有沒有提到我有多愛你們?我的教授說我嘗試python,到目前爲止我討厭它,但我決定嘗試一下。我用一個簡單的程序,使用pygame,在屏幕上移動幾圈。我遇到了一些數學問題。我給出了每個圓(x,y)座標(圓的中心),並根據我希望它們移動的速度(每步移動的距離)計算出它們在屏幕上的偏移量(Dx,Dy)。 這就是我的移動方法進行:蟒蛇數學,畢達哥拉斯,度和座標

def Move(self, speed): 
    Dx = self.qx * (speed * math.sin(math.degrees(90 - Alp))) 
    Dy = self.qy * (speed * math.sin(math.degrees(Alp))) 
    self.x += Dx 
    self.y += Dy 
    print "D = ", math.sqrt(Dx * Dx + Dy * Dy) 

問題: 我計算基於D和D速度使用Pythagorahs定理,然後,使用相同的打印語句計算d(actaully速度)定理,我應該得到一個等於輸入速度的結果。但是,結果我得到的是:

D = 9.15180313227 (speed = 10) 

結果各不相同,並不總是相同的(我有一個隨機值測試方法),但它總是密切與錯。我錯過了什麼?

注:忽略self.qy和self.qx,它們被用來確定正確的方向,他們的價值是1或-1

+2

Dono如果這能解決問題。但是你應該使用'math.radians'將度數轉換爲弧度。 'math.sin'期望角度以弧度表示。 – M4rtini

+0

這不會回答你的問題,但請注意,還有一個'math.hypot()'函數。 – martineau

+0

@ M4rtini,那就是問題所在,謝謝yoiu回答:) martineau,我不確定你想要去哪裏? –

回答

3

展望你的代碼,恰恰是你叫math.degrees(90-Alp),似乎我說你在錯誤地理解math.degrees

>>> math.degrees(2) 
114.59 (...) 

該函數將弧度,而不是相反。如果您改用math.radians,它的性能如何?

+0

errr,完美......是的,它錯誤的方式...... Thx男人:) –