0

又是我。我有没有提到我有多爱你们?我的教授说服我尝试 python,到目前为止我讨厌它,但我决定试一试。我使用 pygame 制作了一个简单的程序,它可以在屏幕上移动几个圆圈。我对其中的一些数学问题有疑问。我给了每个圆 (x, y) 坐标(圆心),并根据我希望它们移动的速度(每次移动的距离)计算了它们在屏幕上的偏移量(Dx, Dy)。这是我为 move 方法所做的:

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)

问题:我使用毕达哥拉斯定理根据速度计算 Dx 和 Dy,然后使用相同的定理在 print 语句中计算 D(实际速度),我应该得到一个等于输入速度的结果。但是,我得到的结果是:

    D =  9.15180313227 (speed  = 10)

结果各不相同,并不总是相同(我有随机值的测试方法),但它总是接近且错误的。我错过了什么?

注意:忽略 self.qy 和 self.qx,它们用于正确确定方向,它们的值是 1 或 -1

4

1 回答 1

3

查看您的代码,以及您调用的确切位置math.degrees(90-Alp),在我看来,您math.degrees以错误的方式理解:

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

此函数将弧度转换为度数,而不是相反。如果你改用它,它的表现如何math.radians

于 2014-03-12T17:04:11.457 回答