nordic-skating / local-littlejs / files / src / ice / strength.ts
Branch local-littlejs · default branch · all branches
strength.ts
6216d5cb 2026-10-09 Pavel Safronov | 1 | /** |
| 2 | * How much ice it takes to hold a skater up. | |
| 3 | * | |
| 4 | * Gold's formula, from the record of what did and did not go through the ice roads of | |
| 5 | * Canada: a sheet `h` cm thick carries a load of `A · h²` kg, where `A` says how much | |
| 6 | * risk is being run. L. W. Gold, "Use of ice covers for transportation", Canadian | |
| 7 | * Geotechnical Journal 8, 170–181 (1971). | |
| 8 | */ | |
| 9 | ||
| 10 | /** Gold's `A`, kg/cm²: safe, failure unlikely. */ | |
| 11 | export const A_SAFE = 3.5 | |
| 12 | /** The upper limit for ordinary use: beyond it the ice is being asked a lot. */ | |
| 13 | export const A_LIMIT = 7 | |
| 14 | /** Beyond this, failure should be expected. */ | |
| 15 | export const A_FAILURE = 17 | |
| 16 | ||
| 17 | /** A skater with clothes, skates and a pack, kg. */ | |
| 18 | export const SKATER_MASS = 80 | |
| 19 | ||
| 20 | /** Thickness of ice, metres, that carries `mass` kg at risk `a`. */ | |
| 21 | export function bearingThickness(mass: number, a: number): number { | |
| 22 | return Math.sqrt(mass / a) / 100 | |
| 23 | } | |
| 24 | ||
| 25 | /** | |
| 26 | * The three thicknesses that matter to one skater, metres. They are the zones of the | |
| 27 | * lake, and nothing about them is chosen: they are Gold's three values of `A`. | |
| 28 | * | |
| 29 | * - Thinner than `BREAKING` (2.2 cm) the ice gives way. | |
| 30 | * - Up to `CRACKING` (3.4 cm) it holds, and cracks under the skater as it does. | |
| 31 | * - Up to `SAFE` (4.8 cm) it is sound ice run close to its limit: the ice of the film, | |
| 32 | * at 4.1 cm, and the ice that sings best. | |
| 33 | * - Beyond that it is safe, and sings lower the thicker it gets. | |
| 34 | */ | |
| 35 | export const BREAKING_THICKNESS = bearingThickness(SKATER_MASS, A_FAILURE) | |
| 36 | export const CRACKING_THICKNESS = bearingThickness(SKATER_MASS, A_LIMIT) | |
| 37 | export const SAFE_THICKNESS = bearingThickness(SKATER_MASS, A_SAFE) |