0

円を軌道に乗せるために、この方程式が与えられました。永遠に周回するはずだと仮定して、無限ループを作成しました。x = cx + r*cos(t)y = cy + r*sin(t)

私は何か間違ったことをしていますか?

from graphics import *
import math
def main():
    win=GraphWin("Cirlce",600,600)
    x=250
    y=70
    c=Circle(Point(x,y),18)
    c.draw(win)
    v=True
    while v==True:
        c.undraw()
        x = x + c.getRadius()*math.cos(2)
        y = y + c.getRadius()*math.sin(2)
        c=Circle(Point(x,y),18)
        c.draw(win)
main()
4

2 に答える 2

0

問題はここにあります:

    x = x + c.getRadius()*math.cos(2)
    y = y + c.getRadius()*math.sin(2)

あなたは一直線に進んでいます。また、コードは非常に高速に実行されるため、おそらくすぐに範囲外になります。正しいバージョンは次のとおりです。

x0, y0 = 0, 0 # Coordinates of the centre
r = 2         # Radius
t = 0
dt = 0.01     # Or anything that looks smooth enough.

while True:   # No need for an extra variable here
    c.undraw()    # I don't know this graphics library
                  # I will assume what you did is correct
    x = x0 + r * math.cos(t)
    y = y0 + r * math.sin(t)
    c=Circle(Point(x,y),18)
    c.draw(win)
    t += dt
    time.sleep(0.01)

ループの最後で、一定のペースで進むように少しだけスリープ状態にします。一部のグラフィックス ライブラリにはrate、マシンのループ速度に関係なく、1 秒あたりの固定フレーム数で実行できる関数が含まれています。

于 2014-03-27T19:06:06.017 に答える