模拟轨道

Simulating Orbits

所以我正在尝试模拟地球绕太阳运行,其中地球的速度由它与原点和水平面的角度决定。我通过创建一个函数来做到这一点,该函数对三角形 O_correction(x,y) 使用 tanh (opposite/adjacent) 规则。问题是它不是圆形轨道,而是呈螺旋形,我不确定为什么。

scene = canvas()
scene.background = color.white


O = 0
ball = sphere(pos=vector(10,0,0), radius=0.1, color=color.blue)

x = ball.pos.x
y = ball.pos.y

def O_correction(x,y):
    O = math.atan((((y)**2)**0.5)/(((x)**2)**0.5))
    answer = O
    if x >= 0 and y >= 0:
        answer = O
    if x < 0 and y >= 0:
        answer = pi - O
    if x <= 0 and y < 0:
        answer = O + pi
    if x > 0 and y < 0:
        answer =pi*2 - O     
    return answer

t =0
while t < 100:
    x = ball.pos.x
    y = ball.pos.y
    print = (float(O_correction(x,y))
    print = ((x**2) + (y**2))**0.5)
    ball.pos.x -= sin(O_correction(x,y))
    ball.pos.y += cos(O_correction(x,y))
    print(" ")
    t += 1

非常感谢您的帮助, 干杯

我不懂python,但我懂物理

在每一步中,您都将地球沿轨道的 切线 移动固定距离,而不是沿轨道本身移动。这给了你一个向外的螺旋(当你出去时实际上会变得不那么严重)。

试着把时间增量调小一点(比如位置调整除以100),螺旋效果会小很多。

如果你想做得更好,你需要一个不同的公式。您可以强加一个圆形轨道,或者根据守恒量做一些事情(这需要对基础物理学有相当的了解)。