The spacecraft's position and velocity are propagated exactly by solving Kepler's equation each frame, not by integrating forces:
M = n·t, n = √(μ/a³)
M = E − e·sinE (solved by Newton iteration)
r = a·(1 − e·cosE)
perifocal: x = a(cosE − e), y = a√(1−e²)·sinE
velocity from dE/dt = n / (1 − e·cosE)
A rotating ground station tracks the craft. Range-rate is the line-of-sight component of the relative velocity between station and spacecraft:
ṙ = (v_sc − v_station) · L̂ (L̂ = unit line-of-sight vector)
For a coherent two-way transponder link, the ground station's own transmitted frequency is retransmitted by the spacecraft and returns Doppler-shifted on both the up-leg and the down-leg, doubling the one-way shift:
Δf ≈ −2·f₀·ṙ / c
with f₀ the downlink reference frequency (X-band 8.415 GHz or S-band 2.295 GHz here) and c the speed of light — this is the real Deep Space Network radiometric-tracking observable. X-band's higher frequency gives a proportionally larger Doppler shift per km/s of range-rate, so it resolves velocity more precisely than S-band for the same receiver noise.
The craft is only visible when it sits above the station's local horizon (a positive elevation angle, computed from the line-of-sight dot product with the station's local vertical). While visible, each accumulated Doppler pass exponentially tightens a simulated orbit-determination uncertainty toward a converged fix; once the craft sets below the horizon, the fix can only be propagated forward (dead reckoning) and its uncertainty grows again until the next pass reacquires lock.
This 2D build renders the identical physics through three linked panels instead of a 3D scene: an axonometric (rotate-by-drag) top-down/oblique projection of the orbit and ground track, a polar sky plot of the spacecraft's azimuth/elevation as seen from the station (zenith at centre, horizon at the rim — exactly what a real tracking antenna's sky-plot display shows), and a scrolling Doppler strip chart colour-coded green while locked and red through blackout.