Python 数学,毕达哥拉斯,角度与坐标
又是我。有没有提到我有多喜欢你们?我的教授让我试试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)
问题是: 我根据速度用勾股定理计算Dx和Dy,然后在打印语句中用同样的定理计算D(实际上是速度),我应该得到一个和输入的速度相等的结果。但是,我得到的结果是:
D = 9.15180313227 (speed = 10)
结果是变化的,并不总是相同(我用随机值测试过),但总是接近而且不正确。我漏掉了什么呢?
注意:忽略self.qy和self.qx,它们用于正确确定方向,值要么是1,要么是-1。
1 个回答
3
看你的代码,特别是你调用 math.degrees(90-Alp)
的地方,我觉得你可能对 math.degrees
的理解有点误会:
>>> math.degrees(2)
114.59 (...)
这个函数是用来把 弧度 转换成 角度 的,而不是反过来。如果你用 math.radians
会怎么样呢?