SUPERNOVA LABS

ORBITAL NAV

KEPLERIAN MISSION PLANNER v21.0
Initializing...
EPOCH --
|
ISS --km
|
F10.7 150
|
LOCAL TLE
|
OBJ 0
XR:
CAM:
SIM:
OBJECT CATALOG
CUSTOM ORBIT
KEPLERIAN ELEMENTS
Alt (km)Ecc
Inc (Β°)RAAN (Β°)
ArgP (Β°)Ξ½β‚€ (Β°)
NORAD SEARCH
β–Έ PASTE TLE (OFFLINE)
TRACKED OBJECTS
β–Ά PROGRADE β–² NORMAL β—† RADIAL ⬟ NODE
MISSION PLAN
Click any object β†’ ORIGIN
Click another β†’ TARGET
CALCULATE shows full transfer

Orbits are drawn as true Keplerian
ellipses with eccentricity,
perigee & apogee from TLE data.
⚑ STRATEGY mission profiles
Run CALC to see mission strategy analysis.
β—ˆ PORKCHOP Ξ”V map
Requires CALC first. 20Γ—20 Lambert grid.
β—‰ MULTI-LEG route
Click + beside catalog objects to add waypoints.
No waypoints added
ORG: Alt e Inc RAAN Ο‰ Ξ½
TGT: Alt e Inc RAAN Ο‰ Ξ½
SPACECRAFT: m_dry kg Isp s CdΒ·A/m mΒ²/kg Thrust N
// ══════════════════════════════════════════════════════════════ // MISSION ROUTE LINE (Google Maps style) // A continuous, bold, glowing path showing: // β‘  current satellite position β†’ departure node (on origin orbit) // β‘‘ departure node β†’ arrival node (along transfer arc) // β‘’ arrival node β†’ some time ahead (on target orbit) // An animated dot travels the full route to show direction of travel. // ══════════════════════════════════════════════════════════════ let routeLines = []; // THREE.Line objects for the route let ghostMesh = null; // animated dot let _ghostPath = []; // THREE.Vector3[] full stitched route let _ghostT = 0; let _ghostActive= false; // Build one arc segment on an orbit, from nu_start sweeping dNu radians // Returns THREE.Vector3[] in scene coords function buildOrbitArc(orb, nu_start, dNu, steps) { steps = steps || 80; const {a,e,inc,raan,argp} = orb; const cO=Math.cos(raan), sO=Math.sin(raan), cI=Math.cos(inc), sI=Math.sin(inc); const pts = []; for (let k=0; k<=steps; k++) { const nu = nu_start + (k/steps)*dNu; const r = a*(1-e*e)/(1+e*Math.cos(nu))*SC; const u = argp+nu; const x = r*(cO*Math.cos(u)-sO*Math.sin(u)*cI); const y = r*(sO*Math.cos(u)+cO*Math.sin(u)*cI); const z = r*Math.sin(u)*sI; pts.push(new THREE.Vector3(x,z,-y)); } return pts; } // Build the transfer arc from dep_nu to arr_nu of the transfer orbit // Transfer orbit: perigee = dep point (nu_xfer=0), apogee or matching point = arr function buildTransferArc(xferOrb, dep_nu, arr_nu, steps) { steps = steps || 120; const {a,e,inc,raan,argp} = xferOrb; const cO=Math.cos(raan), sO=Math.sin(raan), cI=Math.cos(inc), sI=Math.sin(inc); // Transfer goes from nu=0 (departure) to nu=PI (arrival, Hohmann) // For dep_nu=PI case the xferOrb argp is set so nu=0 still = departure const pts = []; for (let k=0; k<=steps; k++) { const nu = (k/steps)*PI; // always 0β†’Ο€ for half-ellipse transfer const r = a*(1-e*e)/(1+e*Math.cos(nu))*SC; const u = argp+nu; const x = r*(cO*Math.cos(u)-sO*Math.sin(u)*cI); const y = r*(sO*Math.cos(u)+cO*Math.sin(u)*cI); const z = r*Math.sin(u)*sI; pts.push(new THREE.Vector3(x,z,-y)); } return pts; } // Make a glowing route line from a point array function makeRouteLine(pts, color, opacity) { if (pts.length < 2) return null; const geo = new THREE.BufferGeometry().setFromPoints(pts); const mat = new THREE.LineBasicMaterial({ color, transparent:true, opacity, blending: THREE.AdditiveBlending, depthWrite: false, linewidth: 1 }); const line = new THREE.Line(geo, mat); line.renderOrder = 5; sc.add(line); routeLines.push(line); return line; }