Simulation Accuracy and Sources of Error
A plain-language guide to the sources of error between where Curious Pilot draws a satellite and where you would actually see it among the stars.
Overview
Curious Pilot draws three things on the sky: stars, Solar System bodies (Sun, Moon, planets), and satellites. The first two are computed to better than one arcsecond — far smaller than a pixel at any reasonable zoom level. The error you sometimes see is almost entirely on the satellite side.
This document explains, in plain terms, where that error comes from and roughly how big it is. The factors are listed in order of how much they contribute, from most important to least.
Assumptions
The Error Factors, Most to Least Important
Simplified General Perturbations model #4 (SGP4) propagation error
Dominant — ~5 to 20 arcminEvery satellite in the U.S. catalog is described by a small set of orbital parameters. To compute where the satellite will be a few minutes or hours later, the simulator uses a 1970s-era physics model called the Simplified General Perturbations model #4, or SGP4. SGP4 is fast and standardized worldwide, but it is a simplified model: it approximates Earth's lumpy gravity, atmospheric drag, and the pull of the Sun and Moon. The full set of physics is too expensive to recompute for thousands of satellites in real time.
Two errors stack here:
- Fit error at the moment of publication: roughly 1 km from the start, baked into the published parameters.
- Drift over time: roughly 1 to 3 km per day for LEO satellites, dominated by unpredictable atmospheric drag (which depends on solar activity).
For a satellite directly overhead at 400 km altitude, 2 km of position error projects to about 17 arcminutes in the sky — a little more than half the width of a full Moon.
Residual atmospheric-refraction modeling error
Tiny — under 2 arcmin in any realistic situationEarth's atmosphere bends light. Because the atmosphere is denser near the surface, light rays from above curve gently downward, and an object appears higher in the sky than it geometrically is. This effect is essentially zero overhead and grows rapidly toward the horizon — reaching about 29 arcmin at the geometric horizon at sea level.
The simulator does apply atmospheric refraction to satellite positions (using the Sæmundsson formula), in addition to the refraction already applied to the Sun, Moon, planets, and stars by the Astronomy Engine library. The result is then scaled by the International Standard Atmosphere (ISA) pressure ratio at the observer's actual altitude — so the simulator naturally applies less refraction in the thin air at FL400 than at sea level. A satellite drawn near a star will sit at the correct apparent elevation in most viewing conditions, and a satellite that has just dipped below the geometric horizon may still be drawn (and seen) for an additional fraction of a degree of true elevation below.
Direction of the altitude effect: at altitude the refraction adjustment is smaller, not larger — less of the atmospheric column sits above the observer, so light has less air to bend through. At FL400 the simulator applies about 19% of the sea-level lift; at FL600, only about 7%.
How much refraction lift the simulator applies, scaled by altitude:
| Observer altitude | ISA pressure ratio | Horizon lift | Lift at 10° | Lift at 30° |
|---|---|---|---|---|
| Sea level | 1.00 | ~29' | ~5.3' | ~1.7' |
| 5,000 ft (~1.5 km) | 0.84 | ~24' | ~4.4' | ~1.4' |
| FL300 (9.1 km) | 0.30 | ~8.7' | ~1.6' | ~0.5' |
| FL400 (12.2 km) | 0.19 | ~5.4' | ~1.0' | ~0.3' |
| FL600 (18.3 km) | 0.07 | ~2.1' | ~0.4' | ~0.1' |
The remaining residual error comes from two simplifications, neither of which contributes much:
- ISA instead of real weather: the simulator uses the ISA pressure profile (a fixed altitude-only model) rather than reading the actual surface pressure, temperature, or humidity at the observer's location — none of those measurements are consumed. Real conditions can deviate from ISA by roughly ±10% (cold high-pressure systems amplify refraction slightly; hot low-pressure systems reduce it). The error at the horizon is therefore on the order of 2–3 arcmin at sea level and proportionally smaller at altitude (about 0.2 arcmin at FL600).
- Column-density approximation: the formula treats the atmosphere as a uniform column above the observer. A full ray-trace through a layered atmosphere would differ by roughly 1% at any altitude. Below the SGP4 noise floor.
For the typical airliner-at-cruise + horizon case, the worst-case residual is now well under 2 arcmin — about 1/15 of a Moon-width — and it shrinks rapidly above 10° elevation.
Magnitude of refraction the simulator applies at sea level, by true elevation. Multiply by the ISA pressure ratio at altitude (e.g. ×0.19 at FL400) to get the value the simulator actually applies to an aircraft observer:
| True elevation | Sea-level lift | Effect on display |
|---|---|---|
| Above 20° | under 3 arcmin | Imperceptible |
| 10° to 20° | 3 to 5 arcmin | Brings satellite into agreement with nearby stars |
| 5° to 10° | 5 to 10 arcmin | Visible improvement — satellite no longer drawn below same-elevation stars |
| Below 5° | 10 to 29 arcmin | Major correction; just-set satellites still drawn for a fraction of a degree of true elevation below the horizon |
Frame-rate caching of satellite positions
Tiny — under 0.5 arcminFor performance, the simulator only fully recomputes satellite positions every third animation frame (about every 33 milliseconds at 60 frames per second), reusing the cached values in between. A satellite moving at orbital speed (~7.5 km/s) travels about 0.25 km in that interval — which projects to under 0.5 arcmin at typical viewing distances. Imperceptible.
True Equator Mean Equinox (TEME) treated as Pseudo Earth Fixed (PEF)
Arcsecond-class — invisibleSGP4 outputs satellite positions in a reference frame called the True Equator Mean Equinox of date, or TEME. Strictly speaking, converting TEME to an Earth-rotating frame requires a small correction called the equation of equinoxes, then a polar-motion correction. The library used here (satellite.js) skips both and rotates TEME directly into a closely-related frame called Pseudo Earth Fixed, or PEF.
The shortcut introduces under 1 arcsecond of error — roughly 1/2000 of a Moon-width. It is hundreds of times smaller than the SGP4 error already present, and entirely invisible.
Polar motion neglected
Sub-arcsecond — invisibleEarth's rotational pole wanders by about 0.3 arcseconds (roughly 9 meters at the surface) over months. The simulator does not apply this correction. The resulting error is far below any visible threshold.
World Geodetic System 1972 versus 1984 ellipsoid mismatch
Sub-arcsecond — invisibleSGP4 was designed around the World Geodetic System 1972 (WGS-72) shape of the Earth. Modern position data uses the World Geodetic System 1984 (WGS-84). The two ellipsoids differ by a few meters, which is well below pixel scale.
How Position Error Becomes Angular Error
The same kilometer of satellite position error looks very different in the sky depending on how far away the satellite is. The relationship is simple geometry:
angular error (radians) ≈ position error / slant range
| Satellite & viewing geometry | Slant range | 2 km error becomes |
|---|---|---|
| ISS overhead (zenith) | ~400 km | ~17 arcmin (~½ Moon) |
| ISS at 45° elevation | ~570 km | ~12 arcmin (~⅓ Moon) |
| ISS near horizon (10°) | ~1,500 km | ~4.5 arcmin (~⅐ Moon) |
| Starlink overhead | ~550 km | ~12 arcmin |
| GPS satellite overhead | ~20,000 km | ~0.3 arcmin (negligible) |
Putting It All Together
Bottom line
- Ground observer, any elevation: total error is dominated by SGP4 + element age — typically ¼ to ½ Moon-width for fresh data on LEO satellites. Refraction is corrected, so satellites near the horizon line up with nearby stars.
- High-altitude observer (e.g. airliner at FL400 or FL600): refraction is now scaled down by the ISA pressure ratio at the aircraft's altitude, so even at the horizon the correction is appropriately small (~5' at FL400, ~2' at FL600) and the residual is well under 2 arcmin. Above ~10° elevation the residual is invisible.
- Just-set satellites: at sea level a satellite up to about ½° below the geometric horizon is still drawn; from an aircraft the sub-horizon window shrinks proportionally with altitude.
- Stars, Sun, Moon, planets: drawn to better than 1 arcsecond. Effectively perfect.
- Coordinate-frame approximations (TEME-as-PEF, polar motion, WGS-72/84) contribute well under 1 arcsecond combined and are invisible at any practical zoom.
- See it for yourself: hold ⌥ Option (Mac) or Alt (Windows/Linux) and click any visible satellite to display its estimated position uncertainty as a cyan disc on the canvas, sized to the actual angular error budget for that specific satellite. Click anywhere else to dismiss. Most satellites with fresh orbital data show "Imperceptible uncertainty" — the simulator's positions are precise to within visual resolution. Satellites with older orbital data show a visibly larger disc.