fuzzyworld

nordic-skating / local-littlejs / files / src / ice / strength.ts

Branch local-littlejs · default branch · all branches

strength.ts

1.6 KB · history · blame

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. */
11export const A_SAFE = 3.5
12/** The upper limit for ordinary use: beyond it the ice is being asked a lot. */
13export const A_LIMIT = 7
14/** Beyond this, failure should be expected. */
15export const A_FAILURE = 17
16
17/** A skater with clothes, skates and a pack, kg. */
18export const SKATER_MASS = 80
19
20/** Thickness of ice, metres, that carries `mass` kg at risk `a`. */
21export 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 */
35export const BREAKING_THICKNESS = bearingThickness(SKATER_MASS, A_FAILURE)
36export const CRACKING_THICKNESS = bearingThickness(SKATER_MASS, A_LIMIT)
37export const SAFE_THICKNESS = bearingThickness(SKATER_MASS, A_SAFE)