workshop private

← all mechanics

Sidecut

mechanics · created 2026-10-11

A carved ski turn where you never get to pick the arc — R = R_sc·cos φ picks it — and where the edge angle that will hold is pinned to your speed by sin φ = v²/g·R_sc, so a 17 m ski simply stops carving at 44 km/h and no amount of leaning moves that.

physicssimulationgame-feelcanvastopdown

There is no steering wheel. The arrow keys roll the skis onto edge and that is the entire input, because that is the entire input a carving skier has. What comes out the other side is an arc you did not choose, at a speed that decides whether the arc exists at all.

Two lines, and everything else is a consequence

One. A ski has a waist narrower than its tip and tail. Tip it to edge angle φ and press until the edge touches the snow along its whole length, and the edge is now a circular arc of radius

R = R_sc · cos φ

R_sc is stamped on the ski. At 0° you go straight; at 60° a 17 m ski cuts 8.5 m. You are not turning the ski. You are picking a cosine.

Two. In a steady turn the resultant of gravity and the centripetal requirement runs down the skier’s body, at angle λ_req from the snow normal with tan λ_req = a_lat/g_n. The edge holds only while that resultant falls inside the base — the platform-angle rule every ski coach teaches with a hand and a forearm. So:

carve holds  ⟺  φ ≥ λ_req ,   a_lat = v²/R

Substitute the first into the second and the edge angle cancels out of the right-hand side entirely:

sin φ  ≥  v² / (g_n · R_sc)   ≡  q

That is the whole creation. The right-hand side has no edge angle in it — it is speed and a number stamped on the ski. So the shallowest edge that will carve is fixed before you tip anything, it climbs with v², and the moment q reaches 1 there is no angle at all:

v_max = √(g_n · R_sc)

44 km/h on a 17 m ski. Faster than that, on that ski, on that pitch, nothing carves — and essentially everyone on a piste spends most of their day above it. (The relation goes by the ideal-carving equation in the skiing literature; Jentschura & Fahrbach derived it in 2004. I did not invent it, I just made it a control scheme.)

The window, which is the thing you actually watch

q sets a floor on edge angle. The hip sets a ceiling — every degree of edge past the lean the turn demands has to come out of angulation, and a hip runs out somewhere around 25°. Between those two is a band of edge angles that carve, and the demo draws it as a lit arc on the dial. The floor climbs with v²; the band narrows; at v_max it has no width left.

node scripts/measure.mjs prints this, on a 17 m ski over hardpack:

speedcarve load qφ_min = asin qφ_max (hip limit)windowR at φ_min
14.4 km/h0.0995.7°31.7°26.0°16.9 m
21.6 km/h0.22412.9°41.7°28.7°16.6 m
28.8 km/h0.39723.4°65.6°42.1°15.6 m
32.4 km/h0.50330.2°65.6°35.4°14.7 m
36.0 km/h0.62138.4°65.6°27.2°13.3 m
39.6 km/h0.75148.7°65.6°16.8°11.2 m
41.4 km/h0.82155.2°65.6°10.3°9.7 m
43.2 km/h0.89463.4°65.6°2.1°7.6 m
45.0 km/h0.97076.0°—shut4.1 m

Nothing in the demo closes that window. Math.asin closes it.

And there are two ways to be outside it, which is the part that makes it a mechanic rather than a readout:

Each ski is one number, and the number is a trade

skiR_scarc at 60° edgeceiling
slalom12.5 m6.3 m37.4 km/h
all-mountain17 m8.5 m43.6 km/h
giant slalom30 m15.0 m57.9 km/h
downhill45 m22.5 m70.9 km/h

Both columns come off the same R_sc, in opposite directions, which is why a ski cannot be good at both and why the gates in the demo are a real question rather than a scoreboard. Drive the same autopilot — four lines, solve for the arc through the next gate, ask the sidecut for the edge angle that cuts it, clamp into whatever window is open — down 600 m of 19 m gates:

skigates clearedmissedcarvedtop speedceilingended
SL 12.5 m121976.8%37.6 km/h37.4 km/h128 s
all-mtn 17 m102171.3%43.7 km/h43.6 km/h78 s
GS 30 m1090.2%36.1 km/h57.9 km/hcaught an edge at 22 m
DH 45 m0097.1%27.5 km/h70.9 km/hcaught an edge at 6 m

The long skis carve beautifully and go straight into the first flag. The autopilot asks for a 13 m arc, a 45 m ski needs 73° of edge to cut one, the hip cannot find 73° at 27 km/h, and that is the end of that. Note the two “top speed” columns next to the two ceilings: a ski driven by something trying to carve ends up pinned at its own ceiling and nowhere near anybody else’s.

Carving is its own speed limit, which I did not expect to be so tidy

Take the braking away entirely — autopilot holds the shallowest carving edge, flips sides every two seconds, never once tries to slow down — and let the pitch push.

skiceiling10° pitch15°20°25°
SL 12.5 m37.4 km/h26.235.336.339.2*
all-mtn 17 m43.6 km/h21.239.541.946.0*
GS 30 m57.9 km/h38.936.551.061.2*
DH 45 m70.9 km/h52.543.146.058.8

* = it got there with the window already shut.

Up to about 20° of pitch each ski parks near its own ceiling and stays there, and the hill has very little to say about it: the arcs tighten as q rises, tighter arcs cost more speed, and the thing self-limits. At 25° the pitch wins on everything but the downhill ski, and winning means arriving somewhere the window is closed — which is a precise way of saying this run is a skid now, and a fair description of what steep groomers actually are.

The middle rows wobble (the GS ski does better at 10° than at 15°). That is the two-second flip interacting with arc length, not physics; the autopilot is a measuring stick, not a skier.

The dynamic ceiling is lower than the static one, by a consistent 13%

v_max is a statics result — it assumes you are already at that speed in a steady turn. Enter a turn at v on the best edge the window allows and hold it half a second, and gravity is adding speed the whole time, so the window closes underneath the ski:

skiceilinghighest entry speed that held 0.5 sof ceiling
SL 12.5 m37.4 km/h31.9 km/h85%
all-mtn 17 m43.6 km/h37.3 km/h85%
GS 30 m57.9 km/h50.4 km/h87%
DH 45 m70.9 km/h62.3 km/h88%

The ratio barely moves across a 3.6× range of sidecut, which is the tell that it is the same v² showing up in q as in the acceleration, and not four coincidences.

Snow moves exactly one number

The surface toggle changes a_max, the lateral acceleration the snow will key an edge into, and nothing else. Everything downstream falls out:

surfacea_maxuseful edge stops atceiling on 17 mceiling on 30 m
ice0.80 g38.7°36.1 km/h48.0 km/h
hardpack2.20 g65.6°43.6 km/h57.9 km/h
soft1.25 g51.3°40.4 km/h53.6 km/h

On ice at 35 km/h the window is 37°–39°. Two degrees. The dial in media/06-ice.png is the clearest thing in the whole creation: the lit band is a sliver, the needle is just past it, and the ski is gone. Nobody skis badly on ice. The window closes.

The instinct, priced

Same ski, same 30 seconds, three policies:

The first one is interesting because it is not a failure: skidding is a brake, and a brake that works. It is how everybody gets down a slope that is steeper than their ski’s ceiling, and the honest reading of the first row is not “played badly” but “chose 18 km/h.”

What is physics here and what isn’t

Reuse

src/sidecut.mjs is framework-free and has no canvas in it:

Integration is a fixed 1/240 s substep; the demo subdivides whatever the frame gives it. The lean is not integrated as a pendulum — it is solved from balance each step, which is right for a steady carve and wrong during the half-second of a transition, where a real skier is falling across the skis. Porting note: the whole of step() is scalar arithmetic with no allocations, so it drops straight into a tick method.

The demo is demo/index.html with its own copy of the module (ADR-0002), keyboard and drag both, and a window.__demo hook the screenshot rig drives. node scripts/screenshot-demo.mjs regenerates the thumb and all seven media shots and doubles as the smoke test — it rolls the ski with a real arrow key in a real browser and asserts the edge angle and the arc that come back.