01 / Ride, then reactStart from rest. Gravity builds speed on the constant downhill. The cyclist follows the road centerline automatically.
02 / Squeeze the leverDrag the silver brake lever left to pull, right to release, or use the slider. The setting stays where you leave it unless Spring return is on.
03 / Watch the vectorAmber is backward braking force. Cyan is sideways cornering force. Their vector sum must remain inside the traction circle.
04 / Make a clean runCross the finish for a time. Exceed available grip and the attempt ends. Retry the same road and race your best clean run’s ghost.
Stop freezes everything: time, distance, and speed. While stopped, moving the brake previews the force that would be demanded on resume; it does not change the recorded run. A red preview warns of an immediate crash. On-resume inputs are checked before the bicycle moves.
The road moves around you. Heading-up mode keeps the cyclist pointed toward the top of the screen. The bottom-left map does not rotate. Its top is farther along the overall downhill direction. Neither display is a vertical elevation view.
Controls: Space = Ride/Stop; ↑ / ↓ = 5% more/less brake; 0 = release; R = retry; F = fullscreen. Use 0.5× playback for careful demonstrations. The mobile bottom bar provides the same brake and pause controls.
Spring return: pointer-controlled lever and sliders return to zero when released. Preset buttons and keyboard changes remain latched. Pausing also ends an active spring-return pull. Opening settings/help or hiding the page pauses the run; returning does not resume it.
The force circle is not the net-acceleration circle
Gravity supplies the downhill driving component. The tire supplies braking and the lateral force that turns the cyclist. On an unbanked road of constant longitudinal grade:
N = mg cos θ
at = g sin θ − B/m
an = v²/ρ, |Fn| = man
√(B² + Fn²) ≤ μN
Here B ≥ 0 is the brake-force magnitude and ρ is the spatial centerline’s radius of curvature. The circle’s vertical axis is signed forward tire force, so braking points downward. The horizontal axis is signed lateral force: left turns go left; right turns go right. Gravity is not included in this tire-force circle.
b = B/(μN), ℓ = Fn/(μN)
Grip used = 100√(b² + ℓ²) %
Available brake = 100√max(0, 1 − ℓ²) %
For example, at 80% lateral utilization, 60% of the straight-line braking limit remains, not 20%. Braking during a turn is possible if the combined force stays inside the circle. Braking can slow the rider and reduce future lateral demand, yet an excessively large brake command can exceed the current budget immediately.
At rest: a sufficiently squeezed brake holds the bicycle stationary. Its actual force only balances the downhill gravity component, rather than pulling the bicycle backward. The lever percentage is still the requested brake capacity. The race clock keeps running while the bicycle is held still.
Geometry and numerical model
The road is a smooth, unbanked ribbon descending at constant grade. Let q be distance along its horizontal map, s true road distance, and ψ its heading. Then q = s cos θ, z = −s sin θ, and 1/ρ = cos²θ |dψ/dq|. Smooth quintic heading transitions produce continuous curvature. This geometry has no centerline acceleration normal to the road surface, so N = mg cos θ is consistent with the model.
Within each 1/120 s physics step, constant-force tangential motion is solved analytically, including stops. Traction and finish events are bracketed inside the step and refined by bisection. The simulation clock advances from physics steps, not frame count. Slow frames may slow playback rather than skip physics; a hidden tab pauses automatically.
What this model deliberately leaves out
A single resultant contact force represents both tires. There is no banking, steering choice, front/rear brake split, weight transfer, wheel lock dynamics, tire relaxation, drag, rolling resistance, pedaling, brake heating, or active balance. Coefficients are illustrative. A grip-limit violation ends the game; the outward skid-and-fall is a stylized animation, not a post-crash dynamics calculation. The rider icon is enlarged for visibility. This is a mechanics teaching game, not a prediction of safe speeds or braking on a real descent.
Reproducible classroom challenges
Random road changes the seed but preserves the other rules. Save challenge exports a small JSON with the exact course and physics; Load challenge restores it. CSV exports this run’s time, distance, velocity, lever, tire forces, acceleration, curvature, and traction use. Every brake change is recorded as a before/after pair at the same simulation time.
Leaderboard entries match the full course and physics configuration. All manual runs allow pauses; playback speed does not change the physics. Watch demo uses a conservative preview-based controller, is not an optimized solution, and never enters the leaderboard. Taking control of a demo keeps that attempt unranked. Ghosts replay your best completed manual run, not an ideal trajectory. Records stay in this browser only; export important runs.
Physics references
APEX · version 1.0.0 · single-file HTML / JavaScript / canvas. Everything except opening the optional reference links works offline. No external code, fonts, images, or analytics are loaded.