0

zelle グラフィックスを使用して、Python でルーレットの簡単なプログラムを作成しています。私は以下のコードを持っていて、これらの2つの円(トラック)の間にボールを移動しようとしています. それを行う方法はありますか。私の考えは、 unraw(ball.undraw()) して、.10 秒の時間間隔 (time.sleep(.10)) で再度描画することですが、数学的にそれを行う方法がわからないため、トラックを移動します.

from graphics import * 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)

注: 円の中心が 0,0 になるように座標を (-100,-100,100,100) に設定すると、計算が簡単になります。

ボールの新しい位置が得られたので、ボールが各方向に移動する距離が最終位置 (初期位置) になります。

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 回転を意味しません。知る必要がある場合は、1 回転 = 2*pi、つまり約 6.28 です。

ループ内で time.sleep() を使用して速度を落とし、好きな速度にします。

于 2014-10-30T20:15:12.500 に答える