파란 구 - 지구
노란 구 - 토성
흰색 구 - 달
상대적으로 질량이 큰 토성을 기준으로 지구와 달이 그 주위를 도는 것처럼 보인다.
코드)
GlowScript 3.0 VPython
#creating objects
r = 385000e3/2
earth = sphere(pos = vector(r,0,0), radius = 6400000, texture = textures.earth)
moon = sphere(pos = vector(-r,0,0), radius = 6400000, make_trail = True)
sat = sphere(pos = vector(0,0,0), radius = 1737000, color = color.yellow, make_trail = True)
#scailing factor
sf = 3
earth.radius = sf*earth.radius
moon.radius = sf*moon.radius
sat.radius = sf*sat.radius
#physical properties
G = 6.67e-11
earth.m = 5.972e24
moon.m = 5.972e24
sat.m = 1/10*earth.m
earth.v = (0,0,0)
moon.v = vec(0,1000,0)
sat.v = vec(0,0,0)
#momentum conservation
earth.v = -moon.v*moon.m/earth.m
attach_trail(earth)
# time
t = 0
dt = 60*5
#simulation loop
while True:
rate(1000)
#forces
r_me = moon.pos - earth.pos
f_me = -G*earth.m*moon.m/mag(r_me)**2*norm(r_me)
r_sm = sat.pos - moon.pos
f_sm = -G*sat.m*moon.m/mag(r_sm)**2*norm(r_sm)
r_se = sat.pos - earth.pos
f_se = -G*sat.m*earth.m/mag(r_se)**2*norm(r_se)
#time integration
earth.v = earth.v + (-f_me-f_se)/earth.m*dt
moon.v = moon.v + (f_me-f_sm)/moon.m*dt
sat.v = sat.v + (f_sm+f_se)/sat.m*dt
earth.pos += earth.v*dt
moon.pos += moon.v*dt
sat.pos += sat.v*dt
t += dt
'물리코딩' 카테고리의 다른 글
등속도, 등속직선, 등가속도 운동 (0) | 2021.12.31 |
---|---|
수직(자유낙하운동) + 수평(포물선운동) (0) | 2021.06.28 |
달이 멈춘다면 ?! (0) | 2021.06.24 |
달의 공전 (0) | 2021.06.24 |
지구의 자전 (0) | 2021.06.24 |