0

我正在使用 zelle 图形在 python 中制作一个简单的轮盘赌程序。我有下面的代码,我试图在这两个圆圈(轨道)之间移动球。有没有办法做到这一点。我的想法是 undraw(ball.undraw()) 并在 0.10 秒的时间间隔内再次绘制它(time.sleep(.10)) 但我不知道如何在数学上做到这一点,所以它在轨道上移动.

从图形导入 * def main(): win = GraphWin()

Circle1 = Circle(Point(100,100),95) #Makes the first Circle
Circle1.draw(win)

Circle2 = Circle(Point(100,100),80) #Makes the second Circle
Circle2.draw(win) 

Ball = Circle(Point(100,12),5) #Makes the ball Circle
Ball.draw(win) 

win.getMouse()
win.close()

主要的()

4

1 回答 1

2

您正在寻找的方法是 move(dx,dy)。

要计算球需要移动的每个方向的距离,您必须找到球的新位置。这些位置的 x 和 y 坐标将与将球连接到车轮中心的线的角度的正弦和余弦(从数学库中调用)相关联。

x = radius*sin(angle)
y = radius*cos(angle)

注意:如果将坐标设置为 (-100,-100,100,100) 以使圆心位于 0,0 处,则计算会更容易。

现在您有了球的新位置,它在每个方向上移动的距离将是最终位置 - 初始位置。

Ball.move(x - Ball.getCenter().getX(), y - Ball.getCenter().getY())

将它们扔成一个循环并稳定地积累你的角度,你的球将沿着半径稳定地移动。

angle = 0
radius = 87
while angle < 360:
    x = radius*sin(angle)
    y = radius*cos(angle)
    Ball.move(x - Ball.getCenter().getX(), y - Ball.getCenter().getY())
    angle += 0.01

注意:角度 = 360 并不意味着转一圈,因为数学库中的默认角度单位是弧度。如果您需要知道,1 转 = 2*pi,或大约 6.28。

在循环中用 time.sleep() 减慢它的速度,让它以你喜欢的任何速度运行。

于 2014-10-30T20:15:12.500 回答