Template:Hidden
from __future__ import division from visual import * from visual.graph import * scene.width=1024 scene.height=760
- CONSTANTS
G = 6.7e-11 mEarth = 6e24 mcraft = 15000 deltat = 60 t = 0 mMoon = 7e22 scale = 800000 c=2.99792e8
- OBJECTS AND INITIAL VALUES
Earth = sphere(pos=vector(0,0,0), radius=15e6, material = materials.BlueMarble)
- Add a radius for the spacecraft. It should be BIG, so it can be seen.
craft = sphere(pos=vector(-60160000,-192000,0), radius=2e6, material = materials.marble) Moon = sphere(pos=vector(4e8,0,0), radius=1.75e6, material = materials.marble) vcraft = vector(735,2849,0) pcraft = mcraft*vcraft
trail = curve(color=craft.color) # This creates a trail for the spacecraft
- scene.autoscale = 1000000 # And this prevents zooming in or out
pscale = Earth.radius / mag(pcraft) fscale = Earth.radius/ ((G*mEarth*mcraft)/mag(craft.pos-Earth.pos)**2) dpscale = 500 * Earth.radius/mag(pcraft)
r_EarthMoon = Moon.pos - Earth.pos #Relative position vector from Earth to Moon r_EarthMoon_mag = mag(r_EarthMoon) F_EarthMoon_mag = (G*mcraft*mEarth)/(r_EarthMoon_mag**2) r_EarthMoon_hat = r_EarthMoon/r_EarthMoon_mag
Force_EarthMoon = (-r_EarthMoon_hat)*F_EarthMoon_mag #Force on Moon due to Earth pMoon = Force_EarthMoon / deltat
- CALCULATIONS
print("p=", pcraft) while t < (10e10):
rate(500) # This slows down the animation (runs faster with bigger number) rE = craft.pos - Earth.pos rEmag = mag(rE) FEmag = (G*mcraft*mEarth)/(rEmag**2) rEhat = rE/rEmag FEnet = (-rEhat)*FEmag
rM = craft.pos - Moon.pos rMmag = mag(rM) FMmag = (G*mcraft*mMoon)/(rMmag**2) rMhat = rM/rMmag FMnet = (-rMhat)*FMmag Fnet = FMnet+FEnet
pcraft_i = pcraft + vector(0,0,0) pcraft_ii = mag(pcraft_i) pcraft = pcraft + ((Fnet)*deltat) pcraft_f = pcraft pcraft_ff = mag(pcraft) vavg = pcraft/mcraft speedcraft = mag(vavg) craft.pos = craft.pos + vavg*deltat
Fnet_tangent = ((pcraft_ff-pcraft_ii)/deltat)*(pcraft/mag(pcraft))*pscale Fnet_perp = Fnet - Fnet_tangent
r_EarthMoon = Moon.pos - Earth.pos #Relative position vector from Earth to Moon r_EarthMoon_mag = mag(r_EarthMoon) F_EarthMoon_mag = (G*mcraft*mEarth)/(r_EarthMoon_mag**2) r_EarthMoon_hat = r_EarthMoon/r_EarthMoon_mag r_craftMoon = Moon.pos - craft.pos#Relative position vector from spacecraft to Moon r_craftMoon_mag = mag(r_craftMoon) F_craftMoon_mag = (G*mcraft*mEarth)/(r_craftMoon_mag**2) r_craftMoon_hat = r_craftMoon/r_craftMoon_mag
Force_EarthMoon = (-r_EarthMoon_hat)*F_EarthMoon_mag #Force on Moon due to Earth Force_craftMoon = (-r_craftMoon_hat)*F_craftMoon_mag#Force on Moon due to spacecraft Fnet_Moon = Force_EarthMoon + Force_craftMoon #Net force on Moon
momentum_Moon = pMoon + Fnet_Moon*deltat#Update momentum of Moon vavg_Moon = momentum_Moon/mMoon Moon.pos = Moon.pos + vavg_Moon * deltat #Update momentum of Moon
trail.append(pos=craft.pos) t = t+deltat pcraft = pcraft_f deltap = pcraft - pcraft_i