SKI JUMPING - credits, sources and reconstructions ================================================== An independent, from-scratch reimplementation of ski jumping. It is not affiliated with, endorsed by or connected to the International Ski and Snowboard Federation (FIS) or any of its member associations. No code, artwork or data files from any other ski jumping game are used. The rules and hill geometry are quoted from public FIS documents, which remain the property of FIS. THE SPORT --------- Ski jumping has been contested since Ole Rye's 9.5 m at Eidsberg, Norway, in 1808, and at every Winter Olympics since the first at Chamonix in 1924. The V-style this app models was introduced by Jan Bokloev (Sweden) in the mid-1980s and had swept the sport within a decade. 1. THE RULES - what is quoted, and from where --------------------------------------------- FIS International Ski Competition Rules (ICR), Book III - Ski Jumping, edition JUNE 2026. https://assets.fis-ski.com/f/252177/x/c67426c343/icr-ski-jumping-2024_e_clean.pdf (Note the FIS CDN filename says 2024; the document itself is the June 2026 edition.) Art. 430 "A jumper reaching the K point receives 60 points. Style points may reach a maximum of 60 points." Art. 431.2.1 The flight: maximum deduction for the whole group, 5.0 points. Art. 431.2.2 The landing, maximum 5.0; the telemark requirement; "no telemark landing (feet parallel) ... 3.0 pts". Art. 431.2.3 The outrun, maximum 7.0; "fall before crossing or on the fall line ... 7.0 pts". Art. 432.1 The distance is measured "from the edge of the takeoff to the point where the jumper touches the landing slope ... The landing is considered complete when both feet are in full contact with the landing slope"; for a fall, to where any part of the body first touches. "If there is a distance between both feet, the middle between the legs is the relevant point." Art. 432.2 Distance recorded to an accuracy of 0.5 m. Art. 433.1 Five judges; the highest and lowest scores are eliminated and the remaining three added. Art. 433.2 The metre-value table by K-point band, reproduced in full in js/skijumping.js. Art. 433.3 "If the total of the style and distance points results in a negative sum, the minimum score is at least zero." Art. 411 The jumping-hill construction standard itself. Art. 411.3.2.2 "The landing area from P to L is of a circular shape which is determined by the radius rL. This radius starts at the P point with the tangent angle betaP. At the K point and at L the tangent angles are beta and betaL." Art. 411.4 t = 0.25 v0; s = 0.025 w (at least 0.70 m); bK = 0.20 w; bA = 0.22 w. Art. 415.1 Distance markings "measure along the slope in 1 m intervals", from the take-off edge down the landing slope. This is why a jump is measured along the hill and not horizontally - worth 8 to 20 m at the K point. Art. 415.2 v0 is measured over an 8 m photocell gate ending 10 m before the take-off edge. Art. 415.3 The wind instruments are placed "alongside the landing slope at the height of the optimal flight trajectory", at the take-off and at about 50% and 100% of the distance to the K point. Art. 417.1 Two inrun tracks, 30 to 33 cm between centres, 13.0 to 13.5 cm wide. Art. 422.1 The Wind/Gate Compensation System, and that its factor is included in the total. Art. 441/443 The qualification cuts the field to 50 (40 at Ski Flying); only the top 30 of the first round start the final, in reverse order of the first round's score. Art. 454.4.4 "At Ski Flying events the K-point distance as calculation point equals 120 distance points and the meter value is 1,2 pts./m." This OVERRIDES Art. 430's blanket 60. FIS Style Judging Guidelines, dated 2024-06-15. https://assets.fis-ski.com/f/252177/x/727b866905/judgingguidelines-2024-09-26.pdf The full three-group deduction table - flight, landing, outrun - with its itemised ranges, the fixed 3.0 for "No Telemark", the 3.0 for one hand down, the 4.0 to 5.0 for both hands, back or posterior, and the 7.0 for a fall on or before the fall line. Reproduced in SJ.DEDUCT. The telemark definition, verbatim: "A landing movement resulting in a position where the separation between the feet is approximately the length of a foot with the legs actively and clearly bent to show that the landing force is being effectively absorbed upon impact." FIS Jumping Hills - Construction Norm 2018, author Hans-Heini Gasser (SUI), edition November 2018, the implementing provisions for ICR Art. 411. https://assets.fis-ski.com/f/252177/5ba64e29f2/construction-norm-2018-2.pdf Section 4.2 The four sections of the landing profile, and that the knoll is a CUBIC PARABOLA: "The knoll should be adapted in a manner that the highest point of the flight trajectory of the jumper is reached about halfway through. A cubic parabola will resolve this challenge nicely." Section 5 The definition of the gate and wind compensation factors, computed at the winner's distance ws = (w + HS)/2 from the hill's own simulated flight. Quoted in full in js/skijumping.js. Section 6.2 "Dry friction is assumed for the sliding phases, with a friction angle of 1 degree for ice and ceramic tracks and 3 degrees for naturally cooled snow tracks." Section 6.4 betaP = beta + 0.5 alpha - 2.5; beta0 = betaP/6; HS = w/0.9; w = 1.005 x |T-K|; the h/n band w/800 + 0.400 to w/1000 + 0.480; the table-angle band w/30 + 6.9 to w/30 + 7.9; the centrifugal limits of 0.70 g at E2 and 0.80 g between L and U. Hans-Heini Gasser, "Grundlagen der Auslegung des Laengsprofils einer Skisprungschanze", June 2008 - the mathematical companion to the norm, and the only public place its equations appear. https://assets.fis-ski.com/f/252177/08fcdef335/grundlagen-f-c3-bcr-die-auslegung.pdf Section 2.1 The inrun transition as a cubic parabola eta = C xi^3 in the frame rotated by gamma, with d = 2 r1 sin(g-a) cos^2(g-a), C = tan(g-a)/(3 d^2), f = tan(g-a) d/3, and the arc length l = d (1 + 0.1 tan^2(g-a)). Section 2.2 The inrun glide, d(v^2)/ds = 2 g sin(phi - rho) - 2 (k + rho/r) v^2, with its closed-form solution on the straights; the measured friction angle 1.7 +/- 0.6 degrees and crouch drag coefficient k = 0.0011 +/- 0.0001 1/m from the Engelberg survey of December 2006 (ETH Zurich). Section 3 The flight as four ODEs in the speed and the trajectory angle; v_perp = 2.2 m/s "evaluations of the longest jumps have given 2.2 m/s"; the equivalent landing heights of 0.90 m at K (4.2 m/s) and 1.60 m at L (5.6 m/s); and Table 2, "Luftkraftbeiwerte Engelberg 2006" - the measured drag and lift coefficients kW and kA against the trajectory inclination for three classes of World Cup athlete. That table is reproduced in full in tools-oracle.js and is the app's independent oracle. Gasser is also explicit that a take-off cannot add speed along the table: "That is of course nonsense and belongs in the same category as the still-'to-be-invented' perpetuum mobile." Section 4 The landing area, l2 = (beta - betaL) rL pi/180. 2. THE HILLS - six FIS Certificates of Jumping Hill ---------------------------------------------------- Every hill is rebuilt from the numbers on its own certificate. The certificates are FIS documents, republished by the Ski Jumping Hill Archive (skisprungschanzen.com), from which the copies used here were read. Horecky HS106, Frenstat pod Radhostem, Czechia cert 380 / CZE 1, 02.08.2024 Toni-Seelos-Schanze HS109, Seefeld, Austria cert 3 / AUT 3, 06.09.2023 Holmenkollbakken HS134, Oslo, Norway cert 86 / NOR 1, 17.02.2022 Schattenberg HS137, Oberstdorf, Germany cert 149 / GER 19, 03.08.2022 Lysgardsbakken HS140, Lillehammer, Norway cert 303 / NOR 43, 21.11.2022 Vikersundbakken HS240, Vikersund, Norway cert FLY IV / NOR, 05.08.2022 HOW WELL THE RECONSTRUCTION CLOSES. From nine certificate numbers - h, n, s, beta0, betaP, beta, betaL, l1, l2 - the app rebuilds the whole longitudinal profile and then compares the P, K and L distances it produces against the ones the SAME certificate prints independently: Holmenkollen HS134 P -0.06 K -0.04 L -0.09 m Oberstdorf HS137 P +0.02 K -0.00 L +0.04 m Lillehammer HS140 P +0.47 K -0.00 L +0.06 m Frenstat HS106 P -0.24 K -0.28 L -0.25 m Seefeld HS109 P +0.97 K +0.97 L +1.00 m Vikersund HS240 P +3.07 K -0.23 L +7.53 m Seefeld's uniform +0.97 m is the CERTIFICATE'S own inconsistency, not the app's: 1.005 x |T-K| from its printed h and n gives 99.97 m against its printed K of 99.00 m. Vikersund is a FLYING hill and lies outside the design system entirely - it uses HS = 1.2 w (240/200 exactly) where every other class uses HS = w/0.9, and the Construction Norm itself says its JUMP-3.5 program "cannot be used for ski flying hills". Its landing area is held at its printed rL and the residual is reported here rather than fitted away. BERGISEL HS128 IS NOT SHIPPED, and the reason is worth recording. Its certificate (2 / AUT 2, 28.07.2024) prints rL = 240 m, but its own l1 and l2 over its own printed angle changes imply 304 m and 131 m for the two halves of the same arc - a factor of more than two. No single reading of that certificate reconstructs the hill, so it was dropped rather than guessed at. 3. THE AEROFOIL - what is measured and what is not --------------------------------------------------- Walter Mueller, "The physics of ski jumping", CERN Yellow Report CERN-2006-014, pp. 269-278 (Proceedings of the 2005 European School of High-Energy Physics), DOI 10.5170/CERN-2006-014.269 - open access, and the only place the Graz group's wind-tunnel fits are printed in the clear. Measured in the Arsenal Research wind tunnel, Vienna, 5 x 5 m working section, up to 32 m/s, so at flight speed; model A, athlete height 1.78 m; reference posture alpha 35.5, beta 9.5, gamma 160, V 35 degrees. Fig. 5(a) L(alpha) = -0.43903 + 0.060743 alpha - 7.192e-4 alpha^2 (lift area, m^2) D(alpha) = -0.032061 + 0.01232 alpha + 2.283e-4 alpha^2 (drag area, m^2) measured at alpha = 30, 35.5 and 40 degrees. Fig. 5(c) L(beta) = 0.75037 + 8.86746e-3 beta - 2.99665e-4 beta^2 D(beta) = 0.578995 + 0.01201 beta + 2.91724e-5 beta^2 Fig. 5(d) L(gamma) = -2.442 + 0.04035 gamma - 1.25e-4 gamma^2 D(gamma) = 1.722 - 0.01365 gamma + 4.5e-5 gamma^2 Fig. 2 The mean flight position of the best ten athletes in each of five runs of the OLYMPIC competition at Park City, 2002 - the angle of attack, the body-ski angle, the hip angle and the ski opening angle against flight time. This is what the opponents fly and what the player's controls are bounded around. Fig. 6 The lift and drag area of a reference jump against flight time. HELD OUT of the fit and used only to validate it. Fig. 8 The mass sensitivity: 55, 65 and 75 kg land at 107.6, 100.6 and 92.4 m horizontally, i.e. about 0.76 m per kg, with the sensitivity itself falling as the jumper lightens. TWO ERRATA IN THAT LECTURE, established during this build and reported rather than worked around: (a) Its printed vertical equation of motion carries the LIFT with the wrong sign - it reads -Fl cos(phi) where it must be +Fl cos(phi). (b) Its Fig. 5(b) lift polynomial returns a NEGATIVE lift area at every angle it covers, which is impossible; the 5(b) and 5(c) formulae appear to be printed under the wrong panels. Only 5(a) and 5(d) are used here, and they agree with each other at their shared reference posture to 0.4% - the only cross-check the source offers, and it passes. THE MODEL THIS APP FLIES, and why it is not simply a look-up of the above. Mueller's polynomials cannot be used through the early flight: his lift area goes NEGATIVE below 7.98 degrees of angle of attack and his drag area below 2.49 degrees, and a jump spends its first second in exactly that range. So the shape flown is the cross-flow form of a separated bluff body, lA(alpha) = NL sin(alpha) cos(alpha) NL = 1.707349 dA(alpha) = P + ND sin^2(alpha) ND = 1.734031, P = 0.109111 m^2 with the three constants obtained by least squares IN CODE AT LOAD TIME against Mueller's three measured angles of attack, so they cannot drift from the source. The fit is within 0.50% on lift and 0.12% on drag at every measured point. The FORM is chosen; the NUMBERS are not. HELD-OUT VALIDATION. Fed the Olympic flight schedule (Fig. 2) and compared against Mueller's own reference-jump force history (Fig. 6), which the fit never saw, the model is within 7.8% on lift area, 4.8% on drag area and 5.6% on their ratio over the published points of the first two seconds. Switching the ski-opening term off nearly TRIPLES the drag error, which is how that term earned its place. WHERE THE MODEL DISAGREES WITH THE LITERATURE, stated plainly: - Its peak lift-to-drag ratio of 1.90 at an angle of attack of 13.7 degrees is an extrapolation below every measured range, and it is about 30% too high. Ryu, Cho and Cho (Trans. JSASS 58(4):203-212, 2015), whose CFD is validated against this same wind tunnel to 7.2%, measure 1.457 at 15 degrees; FIS's own competition-measured coefficients peak at 1.33; Virmavirta et al. (Front. Sports Act. Living 7:1693699, 2025) measure 1.1 to 1.5 falling at 0.02 per degree over 21 to 36 degrees. All four agree the peak is well below 30 degrees, the location often assumed for it. - Its ski-opening turnover at about 47 degrees is well above the 20 to 30 degrees the CFD literature reports (Seo/Watanabe/Murakami about 26; Norstrud and Oye 20 to 30; Hu, Chen and Zhang about 30). The span/induced-drag derivation gets the mechanism and the direction right and the turnover angle wrong. Neither disagreement is tuned away. 4. RECONSTRUCTED - every figure with no source, and why -------------------------------------------------------- Everything in this section is this app's own. It is listed so that nothing here can be mistaken for a quoted fact. R1 THE COMPOSITION OF MUELLER'S SECTIONS INTO ONE SURFACE. He measured one angle at a time. This app multiplies the four one-dimensional sections together, each normalised at his reference posture. That is a modelling choice, not a measurement. The only evidence for it is that his three independent sections agree with each other at that shared posture to 0.4%, and that the composed model reproduces his reference jump to under 8% on data it never saw. A second beta-sweep at a different angle of attack, digitised from his Fig. 5(c) during this build, shows the sections are NOT strictly separable - the lift-area optimum in beta moves from 14.8 degrees at alpha 35.5 to 18.8 degrees at alpha 30 - so the composition is known to be an approximation at about the 4% level. R2 THE SKI OPENING ANGLE. Every one of Mueller's series was flown at V = 35 degrees, so its effect is DERIVED here rather than quoted, from lifting-line theory: two skis opened to a V span 2 L sin(V/2), and the induced drag area is lA^2 / (pi e b^2). The span efficiency e = 0.60 has no source and scales how strongly the ski opening matters. The derivation is what the V-style IS - parallel skis span about 0.21 m and a 35-degree V spans 1.55 m - and it is validated only indirectly, by cutting the model's drag error against Mueller's reference jump to a third. R3 THE EARLY-FLIGHT BLEND. Over the first 0.5 s the forces are interpolated from Mueller's own published reference-jump history toward the aerofoil, with a weight ramping as the square of the elapsed fraction. The 0.5 s is sourced (Virmavirta et al. 2025 put the transient at 0.25 to 0.50 s); the squared ramp is chosen because a linear one under-reads his published curve by 15% at 0.2 s. R4 STRETCHING THE FLIGHT SCHEDULE TO THE HILL. The Olympic measurements are of a four-second flight on a 134 m hill. The schedule's time axis is scaled by HS/134 so that a flying hill's six-and-a-half-second flight develops its position over the flight it actually has. Without it a Vikersund jump comes out 39 m short of what FIS's own model says. R5 THE ANGLE OF ATTACK AS THE CONTROL. The pilot here holds an angle of attack, and the pitch follows. This is a modelling choice with a consequence that was measured: held as a PITCH against the horizon, a 3 m/s headwind flattens the air-relative path, raises the angle of attack by three degrees and takes back the lift it gave - the hill's wind sensitivity comes out at 0.12 m per m/s against the 6.0 FIS publishes, a factor of fifty. Held as an angle of attack it comes out near 4, and FIS's own model independently gives 4.95. R6 THE WIND DIRECTION. ICR Art. 415.3 places the instruments alongside the landing slope and the results sheets report "TAN. WIND", so this app blows the wind along the landing hill's inclination at the K point. That reading is not stated as a vector anywhere; it was established here because it is the only one that reproduces the published factors. A horizontal wind reverses their sign. R7 THE SPAN EFFICIENCY, THE HILL WIDTHS BETWEEN CERTIFICATE POINTS, THE HILL ALTITUDES used for air density (Frenstat 500, Seefeld 1180, Bergisel 750, Holmenkollen 370, Oberstdorf 815, Lillehammer 200, Vikersund 130 m - approximate), and the default air temperature of -5 C. R8 THE JUDGES' MAPPING. The DEDUCTION TABLE is FIS's, verbatim, with its caps. What is this app's own is the mapping from what physically happened - how far from a steady attitude, how hard the landing was against the equivalent landing height, whether a telemark was set in time - onto those deductions, and the half-point lean that makes five judges disagree. R9 THE DIFFICULTY LEVELS. The World Cup level flies at the standard deviations Mueller measured across Olympic athletes (about 2 degrees on the angle of attack and the body-ski angle, 4 on the ski opening). The other three levels widen or narrow them, and those multipliers are invented. NOTE HONESTLY: flying at Mueller's own measured attitude scatter produces a field whose distance spread is sd 11.6 m on Holmenkollen, against the 6.45 m a real FIS first round at Zakopane HS140 showed in January 2025. Attitude scatter alone therefore over-predicts how spread out a real field is, by about a factor of 1.8. R10 THE TAKE-OFF WINDOW of 0.34 s either side of the table edge, and the quadratic fall-off of the perpendicular velocity across it. The 2.5 m/s at the mark is Schmoelzer and Mueller's figure; Gasser reads 2.2 m/s from the longest jumps and the app carries both. R11 EVERYTHING NOT SIMULATED, listed so its absence is not mistaken for a claim: no ski roll or edge angle (which Virmavirta and Kivekaes 2019 show is the single biggest lift killer - C_L falls from 0.90 to 0.32 as the edge goes from 0 to 45 degrees), no lateral motion or crosswind, no in-flight instability (Ryu's static pitch stability limit of about 17 degrees of angle of attack at a 160-degree hip angle is not enforced), no suit or BMI equipment rules, no team event, no trial round, no disqualification, no jury gate changes mid-round. 5. AERODYNAMICS AND BIOMECHANICS - the papers used --------------------------------------------------- Mueller, W. "The physics of ski jumping." CERN-2006-014, pp. 269-278 (2006). DOI 10.5170/CERN-2006-014.269. THE primary source for this app's aerofoil. Schmoelzer, B. & Mueller, W. "The importance of being light: aerodynamic forces and weight in ski jumping." Journal of Biomechanics 35(8):1059-1069 (2002). DOI 10.1016/S0021-9290(02)00066-0. Schmoelzer, B. & Mueller, W. "Individual flight styles in ski jumping: results obtained during Olympic Games competitions." Journal of Biomechanics 38(5):1055-1065 (2005). Mueller, W., Platzer, D. & Schmoelzer, B. "Dynamics of human flight on skis: improvements in safety and fairness in ski jumping." Journal of Biomechanics 29(8):1061-1068 (1996). Mueller, W. "Determinants of ski-jump performance and implications for health, safety and fairness." Sports Medicine 39(2):85-106 (2009). Sole author. Seo, K., Watanabe, I. & Murakami, M. "Aerodynamic force data for a V-style ski jumping flight." Sports Engineering 7(1):31-39 (2004). DOI 10.1007/BF02843971. Seo, K., Murakami, M. & Yoshida, K. "Optimal flight technique for V-style ski jumping." Sports Engineering 7(2):97-103 (2004). DOI 10.1007/BF02915921. NOTE: these two papers are widely miscited as "Seo, Murakami & Yoneyama". There is no Yoneyama on either, and their second and third authors differ from each other. Verified against Crossref. Uhlar, R. & Janura, M. "Pontryagin's maximum principle and optimization of the flight phase in ski jumping." Acta Univ. Palacki. Olomuc., Gymn. 39(3):61-68 (2009). The reference flight schedule, the bounded admissible set, and the finding that a jumper should minimise the angle of attack and the body-ski angle and maximise the ski opening. Ryu, M., Cho, L. & Cho, J. "Aerodynamic analysis on postures of ski jumpers during flight using computational fluid dynamics." Trans. Japan Soc. Aeronautical and Space Sciences 58(4):203-212 (2015). DOI 10.2322/tjsass.58.203. Maximum L/D 1.457 at 15 degrees; the static pitch-stability limits; validated against Schmoelzer and Mueller's wind tunnel to 7.2%. Virmavirta, M., Mueller, S., Kuerschner, M., Bessone, V., Krezalek, P. & Elfmark, O. "Influence of suit size and air permeability on performance in ski jumping. Part I: wind tunnel measurements." Frontiers in Sports and Active Living 7:1693699 (2025). DOI 10.3389/fspor.2025.1693699. Virmavirta, M. & Kivekaes, J. "Aerodynamics of an isolated ski jumping ski." Sports Engineering 22:1-6 (2019). DOI 10.1007/s12283-019-0298-1. Definitive that V = 2 x yaw; 1% of lift is worth 1.7 m; the edge angle is the biggest lift killer. Meile, W., Reisenberger, E., Mayer, M., Schmoelzer, B., Mueller, W. & Brenn, G. "Aerodynamics of ski jumping: experiments and CFD simulations." Experiments in Fluids 41(6):949-964 (2006). Jung, A., Staat, M. & Mueller, W. "Flight style optimization in ski jumping on normal, large, and ski flying hills." Journal of Biomechanics 47(3):716-722 (2014), with a corrigendum at J Biomech 71:313 (2018). Elfmark, O., Ettema, G. & Gilgien, M. Journal of Biomechanics (2022), DOI 10.1016/j.jbiomech.2022.111139. 71 competition jumps by dGNSS: the lift-to-drag ratio correlates with jump length on a LARGE hill and not at all on a normal one, so "a better ratio is always a longer jump" is not asserted here. Zhang, Li, Wang, Chen & Zhao. "Performance and biomechanics in the flight period of ski jumping: influence of ski attitude." Biology 11(5):671 (2022). DOI 10.3390/biology11050671. 6. THE COMPETITION RESULTS USED FOR CALIBRATION ------------------------------------------------ FIS Official Results, Zakopane (POL), Men Large Hill Individual, 19 January 2025 - the hill data block (HS 140, K 125, 1.8 pts/m, gate factor 7.56, wind factors 10.80 head / 16.20 tail) and the full first-round distance distribution (47 jumpers, 115.5 to 145.0 m, mean 128.9, sd 6.45). FIS Official Results, Planica (SLO), Men Flying Hill Individual, 30 March 2025 - the hill data block (HS 240, K 200, 1.2 pts/m, gate 8.64, wind 14.40 / 21.60) and Domen Prevc's world record of 254.5 m, which scored only 46.5 style points. FIS Official Results, Trondheim (NOR), 2 March 2025 - HS 102 / K 94, 48 jumpers, 83.5 to 108.0 m, mean 98.2, sd 5.35. Both sheets are reproduced row by row in tools-harness.js and every printed number is recomputed. 7. THE APP'S OWN CODE ---------------------- js/skijumping.js the engine: the profile construction, the inrun, the takeoff, the aerofoil, the flight, the landing, the judging, the scoring and the competition. Pure and deterministic; no DOM, no timers, no storage. js/render.js a hand-written WebGL2 renderer, no libraries. js/glmat.js just enough 4x4 matrix algebra for one camera. tools-oracle.js FIS's own flight model, re-implemented from Gasser's equations and the Engelberg 2006 coefficient table, sharing no code with the engine. The independent oracle. tools-harness.js 248 assertions over the engine. tools-normals.js the winding test, with four controls that must fail. tools-harness-page.js, tools-smoke.js the page and browser tests. All of it is MIT-licensed; see LICENSE.txt.