Python 数学,毕达哥拉斯,角度与坐标

0 投票
1 回答
553 浏览
提问于 2025-04-17 21:59

又是我。有没有提到我有多喜欢你们?我的教授让我试试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 会怎么样呢?

撰写回答