模拟轨道
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),螺旋效果会小很多。
如果你想做得更好,你需要一个不同的公式。您可以强加一个圆形轨道,或者根据守恒量做一些事情(这需要对基础物理学有相当的了解)。
所以我正在尝试模拟地球绕太阳运行,其中地球的速度由它与原点和水平面的角度决定。我通过创建一个函数来做到这一点,该函数对三角形 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),螺旋效果会小很多。
如果你想做得更好,你需要一个不同的公式。您可以强加一个圆形轨道,或者根据守恒量做一些事情(这需要对基础物理学有相当的了解)。