...
running...
How to use
The kite is held by a tether anchored at the ground on the left; wind blows to the right. Green is lift (perpendicular to the wind), red is drag (along the wind) and purple is weight. The tether has to cancel their sum, so it points exactly opposite to it: the elevation angle is atan((L − W)/D). The plots show how the angle and tension change with wind speed for the chosen kite.
Try: lower the wind until the kite sinks to the ground (minimum wind to lift off is in the readout); change the angle of attack - too small gives little lift, too large gives mostly drag and the tether angle falls; add gustiness to see the kite bob up and down.
The science
For a thin plate at angle of attack α the normal-force coefficient is modelled as a saturating curve with the thin-plate slope 2π per radian at small α and a plateau at 1.28 (flat plate normal to the flow): CN = 1.28 x/(1+x), x = (2π/1.28) sin α, CL = CN cos α, CD = CN sin α + CD0 with CD0 = 0.04. Lift and drag are L = ½ρv²A CL and D = ½ρv²A CD. Balancing the tether tension T against lift, drag and weight W = mg gives T cos β = D, T sin β = L − W so β = atan2(L − W, D), T = √(D² + (L − W)²) and the kite lifts off when v exceeds √(2mg/(ρ A CL)).
Simplifications: quasi-static equilibrium (a first-order lag of 0.8 s stands in for the dynamics), a straight tether without its own weight or drag, a rigid plate instead of a flexible sail, a wind speed that does not vary with height, and an empirical lift curve rather than a measured one.
What is checked and why you can trust it
Every time the page loads, and whenever you press Re-run check, the simulation evaluates its own mathematics against an independent reference, such as a closed-form formula, a finite-difference derivative or an exhaustive count. Each line above reports PASS or FAIL together with the measured numbers, so you can see by how much it agrees. Results are also published on window.__msChecks for automated testing. The check never uses the same code path as the animation it validates, otherwise it would only confirm itself.
How to read a failure: a FAIL line means the measured discrepancy exceeded the stated tolerance for the current slider values. Try Reset, then move the sliders back toward their defaults; if a check still fails at the defaults it is a bug worth reporting. Tolerances are chosen from the numerical method itself, never tuned to make a test pass: round-off level (1e-9) for exact algebra, about 1e-3 for finite differences and Monte Carlo estimates with a few hundred thousand samples, and a documented margin for stochastic learning runs.
Reproducibility: the particle and pen simulations use the browser random generator for initial positions, so exact pixels differ between visits, but the checks depend only on mathematics and not on those positions. Fixed wave tables (curl noise) and fixed grammars (L-system) are deterministic.
This is an educational model. It shows the mechanism clearly, but it is deliberately simplified; the science panel lists what was left out.