2014-10-30 30 views
0

我正在使用zelle圖形制作一個簡單的python輪盤賭程序。我有下面的代碼,我試圖在這兩個圈子(賽道)之間移動球。有沒有辦法做到這一點。我的想法是解壓縮(ball.undraw()),並在.10秒的時間間隔(time.sleep(.10))中再次繪製它,但我不知道如何在數學上做到這一點,所以它通過軌道。Zelle Graphics動畫

從圖形導入* 高清的main(): 贏= 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() 

的main()

+0

你可以在問題主體中修正你的格式,並立即圍繞你的代碼塊嗎? – BlackVegetable 2014-10-30 18:44:12

回答

2

你正在尋找的方法是移動(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()減慢它的速度,使其以任何喜歡的速度運行。