Download or view orbitalBurn.frink in plain text format
// This program draws the effects of a rocket changing an orbit.
// All of the burns use the same change in speed but burn in
// 4 different directions.
//
/** This file demonstrates how thrust in a rocket changes an orbit.
White: Typical orbit
Red: Stop: Slows down rocket
Green: Go: Speeds up rocket
Blue: Down: Burns downward toward planet
Yellow: Up: Burns upward away from planet
Each velocity change is regarded as instantaneous and occurs at the "top"
of the diagram.
*/
[orbitalHeight, dv] = eval[input["Enter orbital changes",[["Height above ground", "1000 km"], ["Velocity change", "1600 km/hr"]]]]
y = earthradius + orbitalHeight
x = 0 miles
vy = 0 m/s
// Calculate horizontal velocity for a circular orbit.
// This is derived sybolically by orbit.frink. It's amazing. Check it out.
vx = G^(1/2) earthmass^(1/2) (earthradius + orbitalHeight)^(-1/2)
println["vx = " + (vx -> "mph")]
// Calculate circular orbital period.
// This is derived sybolically by orbit.frink. It's amazing. Check it out.
period = 2 pi vx^-1 (earthradius + orbitalHeight)
println["Period is " + (period -> HMS)]
g = new graphics
g.backgroundColor[0,0,0]
g.color[0,0,.5]
g.fillEllipseCenter[0, 0, 2 earthradius/mile, 2 earthradius/mile]
g.color[1,1,1]
g.stroke[30 km/mile]
drawOrbit[g, x, y, vx, vy, period] // White: Nominal orbit
g.color[0,.5,1] // Blue: down: Accelerate towards earth.
drawOrbit[g, x, y, vx, vy-dv, period]
g.color[1,1,0] // Yellow: up: Accelerate up
drawOrbit[g, x, y, vx, vy+dv, period]
g.color[1,0,0]
drawOrbit[g, x, y, vx-dv, vy, period] // Red: stop: Backwards (slow down)
g.color[0,1,0]
drawOrbit[g, x, y, vx+dv, vy, period*2] // Green: go: Forwards (speed up)
g.show[]
g.write["orbitalBurn.svg", 1000, undef]
g.write["orbitalBurn.html", 1000, undef]
g.write["orbitalBurn.png", 1000, undef]
drawOrbit[g, x, y, vx, vy, period=220 min] :=
{
p = new polyline
timestep = period/1000
for t = 0 min to period step timestep
{
dsqr = x^2 + y^2
a = G earthmass / dsqr
theta = arctan[y,x]
ax = - a cos[theta]
ay = - a sin[theta]
vx = vx + timestep ax
vy = vy + timestep ay
x = x + timestep vx
y = y + timestep vy
p.addPoint[x/mile,-y/mile]
}
g.add[p]
}
Download or view orbitalBurn.frink in plain text format
This is a program written in the programming language Frink.
For more information, view the Frink
Documentation or see More Sample Frink Programs.
Alan Eliasen was born 20217 days, 23 hours, 56 minutes ago.