Press Space to start
How to play
In the two speed events you land on alternate feet: F puts you down on
the left foot, J on the right. That is not decoration — it is the rule. IJRU 5.0.0 says
On one jump only the right foot must touch the ground and on the next jump only the left foot must
touch the ground
, and the judge counts the first completed right foot jump and each additional
alternating right foot jump
. So your score is the number of right-foot landings,
roughly half your jumps, and if you hit the same foot twice the count stops until you alternate again.
In Double Unders and Triple Unders you jump with both feet (Space) and the rope has to pass under you twice, or three times, in one hop. It only will if you are turning fast enough — the rope's turn rate follows your cadence with a lag, so you have to build the speed before you jump high.
The rope is not an animation. It is a 48-segment inextensible cord, driven by the handles, pulled on by gravity and by quadratic air drag, and it trips you when the simulated cord actually reaches your feet. It really does drag on the floor when you turn it slowly.
- F / J — land left foot / right foot (also ← / →)
- Space — jump on both feet (multiples events); also starts a heat
- R — reset · 1 2 3 4 — choose the event
- On a phone or tablet, tap the Left foot / Right foot / Both feet buttons under the rope; Both feet also starts a heat
- Drag on the picture to orbit the camera; the wheel zooms.
The rope
The question this app was built to answer
As you turn a rope faster, gravity ought to matter less and less beside the centrifugal pull, so the rope's shape ought to stop changing with speed and settle onto some limit curve. That is a claim, not a fact, and this app tests it three independent ways. The short answer: the shape does converge, at a turn rate well below anything a person skips at — but the curve it converges to is not the one the argument predicts, because air drag scales with speed in exactly the same way the centrifugal term does and therefore never becomes negligible.
Three solvers that share nothing
| Method | Max radius a | Thand/Tmin | Thand |
|---|---|---|---|
| Closed form in Jacobi elliptic functions (test oracle) | 0.8965074 m | 6.97178 | 5.00082 N |
Boundary-value solve, RK4 shooting (js/shape.js) | 0.8965172 m | 6.97183 | 5.00092 N |
Time-stepper, 48 segments (js/rope.js) | −0.109 % of the closed form | 6.2511 | — |
The time-stepper's error is a discretisation error and it shrinks as the mesh refines: +0.362 % at 24 segments, −0.109 % at 48, −0.107 % at 72, each averaged over a complete turn. Averaging matters: a single snapshot of a cord that is still ringing reports whatever phase of the ringing it caught, and the same 48-segment run read +0.78 % on one snapshot and −0.50 % on another. The time-stepper is deliberately started on a circular arc of the right length, which is the wrong shape, so "the solver returned its own initial condition" cannot pass for agreement — and the whole radius profile, not just its maximum, lands within 0.15 % of a.
What the shape is — and is not
The curve has a name: the troposkein (Greek tropos, turn + skhoinos,
rope), known from Darrieus vertical-axis wind-turbine blades. Wikipedia says it
does not have a closed-form representation
. We are correcting that published
sentence: in the absence of gravity the curve is exactly
y(x) = a·sn(βcx, k), a Jacobi elliptic sine, with k = a/c,
c² = a² + 2/β, and the length-to-span ratio fixing q = βa² through
L/d = ((q+2)E(k) − K(k)) / K(k), k² = q/(q+2). That is closed form in
elliptic functions, just not in elementary ones; we verified it to 1 part in 1013 against
an independent Runge–Kutta shot of y″ = −2βy√(1+y′²). DERIVED
It is neither a circle nor a catenary, and here is how far from each, as best-fit RMS error in units of the amplitude a, over the exact curve sampled uniformly in arclength:
| Family (all parameters free) | L/d = 2 | L/d = 3.70 | L/d = 6 |
|---|---|---|---|
| Circle (centre and radius) | 6.96 % | 10.39 % | 12.14 % |
| Catenary | 2.58 % | 3.05 % | 3.33 % |
| Wikipedia's "line segments spanned by a tangent circular arc" | 2.15 % | 3.06 % | 3.51 % |
A second correction to the same article, smaller: the segment-and-arc construction it recommends as the approximation is no better than simply calling the curve a catenary — the two agree to within a few tenths of a percent of a across the whole range we tested.
Does the shape stop changing with speed?
With the turning axis horizontal, as a jump rope's is, gravity rotates in the rope's own frame, so while g > 0 there is no steady shape at all — the rope breathes once per turn. (The troposkein literature does treat gravity, but for the Darrieus turbine, where the axis is vertical and gravity lies along it. That is a different boundary-value problem and we do not borrow its answer. qualified)
The turn-averaged shape barely depends on rate at all — within 2.6 % of a even at
1.2 turns/s. What converges is the breathing, and it collapses cleanly onto one dimensionless
group, G = g / (ω²a):
| Gravity | Crossover rate | G at crossover | Ratio to 1 g |
|---|---|---|---|
| ½ g = 4.903 m/s² | 1.121 turns/s | 0.0985 | 0.7050 |
| 1 g = 9.80665 m/s² | 1.590 turns/s | 0.0979 | 1 |
| 2 g = 19.613 m/s² | 2.251 turns/s | 0.0977 | 1.4157 |
The crossover sits at a universal G ≈ 0.098, so ω_c = 3.20·√(g/a), and
doubling gravity moves it by 1.4157 against √2 = 1.41421. For a real rope (a ≈ 1.004 m) that is
1.59 turns/s — 95 turns a minute, slower than anyone actually skips. So yes: the shape
converges, and a real jump rope is always on the converged side of the transition. That is exactly why
a turning rope reads to the eye as a rigid arc.
Where the argument breaks: air drag never becomes negligible
Drag per unit length is ½ρCdD(ωr)² and the centrifugal term is μω²r. Both are exactly quadratic in ω, so their ratio, ½ρCdD·r/μ, does not depend on the turn rate at all. Air drag does not fade out at speed; it is a permanent, fixed fraction of the load, and the limit curve is therefore not the troposkein:
| Case | Max radius | Trailing angle | Out of plane | Thand |
|---|---|---|---|---|
| No drag | 1.025181 m | 0° (planar) | 0 m | 6.3578 N |
| Drag, 5.0 mm cord, 3 turns/s | 1.008463 m | 27.155° | 0.4603 m | 6.1715 N |
| Drag, 5.0 mm cord, 7 turns/s | 1.008463 m | 27.155° | 0.4603 m | 33.6003 N |
| Drag, 2.5 mm cord, 3 turns/s | 1.020936 m | 13.551° | 0.2392 m | 6.3103 N |
Read the middle two rows together: going from 3 to 7 turns/s changes the shape in no printed digit while the tension rises by a factor 5.4440, against (7/3)² = 5.4444. The rope bows 46 cm out of the plane of the handles and stays there at any speed. Halve the cord diameter and the bow halves. It is set by CdD/μ, never by how fast you turn.
Hands on the axis cannot turn a rope at all
A force applied at a point that lies on the rotation axis has zero moment about that axis. So if the handles were the fixed points of the idealisation, no torque could reach the rope and drag could never be balanced: the boundary-value solver returns a singular Jacobian there and the time-stepper stalls. The drive radius is physically the handle — a 12–15 cm speed-rope handle rotated by the wrist supplies exactly the torque arm the model needs, and this app uses 0.13 m. DERIVED
Bending stiffness is the one neglected term that behaves the way the original argument assumed: it acts through a boundary layer of thickness √(EI/T) at the handles, and T grows as ω², so the layer shrinks as 1/ω and really does become negligible at speed. A non-uniform cord (a beaded rope) changes the limit curve but not the convergence, because both sides of the balance scale with ω² whatever μ(s) is. DERIVED
Try it
These buttons run the solvers in your browser, now, on the parameters the game is using.
—
The rules
We were asked to check whether the International Jump Rope Union publishes a countable speed rule rather than assume it. It does. The rulebook is public at rules.ijru.sport as versions 3.0.0 through 5.0.0; this app implements 5.0.0, the current one, and every page we used was stamped "Last updated on 2 Sept 2026" when we read it on 13 September 2026.
What we implemented, verbatim from the rulebook
- Counting.
For all speed events, judges count the first completed right foot jump and each additional alternating right foot jump.
Right foot — not left. Your score is about half your jumps. - Alternation.
If an athlete repeats the same foot twice or more without alternating to the other foot in between judges should stop counting until an alternation occurs.
- Misses cost no deduction.
No deductions are made for any misses in speed or multiples events, once a miss occurs the athlete(s) are allowed to resume jumping immediately.
What a miss does cost is the judge's place: if the missed jump had been counted, exactly one later countable jump is passed over. - Double unders. Counted when
both feet land simultaneously after the rope has passed under the feet twice
; after a counted miss the judge resumeson the second double under following the miss
. - Triple unders. Once one is completed, counting stops at the first stop, miss or other skill — and the athlete has 30 seconds from the start to begin at all.
- Forward only.
Single ropes must be turned in a forward motion.
- False start.
A false start occurs if an athlete's rope begins a rotation before the start signal.
It costs 10 clicks — the Technical Manual setsm = (starts + switches) × 10andR = a − m. - Event lengths. Speed Sprint (SRSS) 1 × 30 s; Speed Endurance (SRSE) 1 × 180 s; Triple Unders (SRTU) no time limit.
- The tones. start-BEEP is a square wave at 578.3 Hz — a D5 at A = 440 — for 0.350 s, and the same tone ends the heat; the soft-BEEP is the sine at the same pitch. This app synthesises exactly those, so no audio file ships. Call-outs come every 10 s for events of 60 s or less, every 60 s plus every 15 s for longer ones.
Where the rulebook does not decide, and what we chose
- Whether a multiples landing with the wrong number of passes counts as a "repeat" for the alternation clause. It is not a speed event, so we do not count it and we leave the judge's state alone.
- Whether the end-of-event single-jump deduction applies when the missed jump was never counted.
We read
a judge has not yet taken off a jump
as meaning the skip-one correction is still outstanding, so an uncounted miss carries no deduction. - How long a miss stops play. The rule explicitly sets no requirement —
there are no special requirements for how this is done
— so the 1.20 s stoppage here is ours, chosen to be playable. - Everything about the rope as an object. IJRU publishes no dimensional rope
specification at all. The Competition Manual's equipment section says only
Ropes can generally be of any length
, plus a limit on how many ropes may be on the field and (for Double Dutch Contest alone) a list of permitted materials. No length, no diameter, no mass, anywhere in 5.0.0. Every rope number in this simulation is therefore ours, and is labelled RECONSTRUCTED or CALIBRATED below. - The spoken durations inside the start sequence. The rulebook fixes the silences (1.000 s, then 0.500 s, 0.500 s, 0.500 s) and the words, not how long the words take.
Changes we made on purpose
- Double Unders is a solo 30-second heat here. The real SRDR is a two-athlete 2 × 30 s relay. We play one leg of it alone. That is our change, not the rule.
- There is one competitor, no judging panel, and therefore no averaging of judges' scores, no head judge, no space violations and no video replay.
- The competition floor is 5 × 5 m for speed stations, which we show, but nothing in this game enforces the boundary.
What we could not check
- No IJRU world-record list is published where we could reach it.
ijru.sport/recordsis a 404 and the site's sitemap has no records page, so this app quotes no record figure and the "best" number on screen is only your own. - Whether the pre-merger FISAC-IRSF rulebooks counted the left foot. We could not reach any FISAC rulebook, so we make no claim about it. What we can say is that IJRU has said right foot in every version it serves: 3.0.0, 4.0.0, 4.2.0 and 5.0.0 all carry the same sentence.
Sources & provenance
Every number in this app carries one of five tags, plus a sixth marker. DOCUMENTED means a published source states it of this subject. qualified marks an entry that is documented, but of something adjacent — a wind-turbine blade rather than a jump rope, a textbook cylinder rather than a rotating cord. Those are counted separately, because folding them into DOCUMENTED would flatter the tally. MEASURED is an output of the solvers in this bundle, DERIVED is algebra done here, CALIBRATED is a value tuned to make the model behave, RECONSTRUCTED is a plausible value nobody publishes.
DOCUMENTED 33 · qualified 4 · MEASURED 17 · DERIVED 10 · CALIBRATED 4 · RECONSTRUCTED 12 — 80 entries. Of the 33 documented entries, 24 come from the IJRU rulebook and 7 from Wikipedia; 4 further entries are documented only of something adjacent and are counted as qualified, not as DOCUMENTED.
| Tag | Entry | Source |
|---|---|---|
| DOCUMENTED | Speed counting: the first completed right-foot jump and each additional alternating right-foot jump | IJRU 5.0.0 judging/speed/counting |
| DOCUMENTED | Feet must alternate; a repeat stops counting until an alternation occurs | IJRU 5.0.0 judging/speed/counting |
| DOCUMENTED | No deduction for a miss; the athlete resumes immediately | IJRU 5.0.0 judging/speed/counting |
| DOCUMENTED | After a counted miss the judge passes over one countable jump | IJRU 5.0.0 judging/speed/counting |
| DOCUMENTED | Double under = both feet land together after two passes and two rotations | IJRU 5.0.0 judging/speed/counting |
| DOCUMENTED | After a counted double-under miss, resume on the second following double under | IJRU 5.0.0 judging/speed/counting |
| DOCUMENTED | Triple unders: counting closes on a stop, a miss, or any other skill | IJRU 5.0.0 judging/speed/counting |
| DOCUMENTED | Triple unders: 30 s from the start to begin at all | IJRU 5.0.0 judging/speed/counting |
| DOCUMENTED | Single ropes must be turned in a forward motion | IJRU 5.0.0 judging/speed/counting |
| DOCUMENTED | False start = the rope begins a rotation before the start signal | IJRU 5.0.0 judging/speed/violations |
| DOCUMENTED | False-start deduction 10 clicks; m = (starts + switches) × 10, R = a − m | IJRU 5.0.0 technical/calculations/speed |
| DOCUMENTED | Space violation: counting stops out of bounds and resumes on re-entry | IJRU 5.0.0 judging/speed/violations |
| DOCUMENTED | SRSS Single Rope Speed Sprint = 1 × 30 s, one athlete | IJRU 5.0.0 competition/competitions |
| DOCUMENTED | SRSE Single Rope Speed Endurance = 1 × 180 s, one athlete | IJRU 5.0.0 competition/competitions |
| DOCUMENTED | SRTU Triple Unders = no time limit, one athlete | IJRU 5.0.0 competition/competitions |
| DOCUMENTED | SRDR Double Unders Relay = 2 × 30 s, two athletes | IJRU 5.0.0 competition/competitions |
| DOCUMENTED | Speed and multiples stations are 5 × 5 m squares | IJRU 5.0.0 competition/standards |
| DOCUMENTED | start-BEEP: square wave, 578.3 Hz (D5 at A = 440), 0.350 s | IJRU 5.0.0 technical/specifications/timing-tracks |
| DOCUMENTED | soft-BEEP: sine wave, 578.3 Hz, 0.350 s | IJRU 5.0.0 technical/specifications/timing-tracks |
| DOCUMENTED | switch-BEEP: square wave, 493.9 Hz (B4), 0.350 s | IJRU 5.0.0 technical/specifications/timing-tracks |
| DOCUMENTED | Start sequence and its silences: 1.000 s, 0.500 s, 0.500 s, 0.500 s, then the beep | IJRU 5.0.0 technical/specifications/timing-tracks |
| DOCUMENTED | The heat is stopped by a second start-BEEP | IJRU 5.0.0 technical/specifications/timing-tracks |
| DOCUMENTED | Call-outs every 10 s for sections of 60 s or less; every 60 s plus every 15 s for longer | IJRU 5.0.0 technical/specifications/timing-tracks |
| DOCUMENTED | A documented negative: "Ropes can generally be of any length" — no length, diameter or mass is specified anywhere in 5.0.0 | IJRU 5.0.0 competition/standards |
| DOCUMENTED | The curve of a rope anchored at its ends and spun about them is the troposkein (tropos + skhoinos) | Wikipedia, "Troposkein" |
| DOCUMENTED | The troposkein is independent of rotational speed in the absence of gravity | Wikipedia, "Troposkein" |
| DOCUMENTED | Wikipedia states the troposkein "does not have a closed-form representation" — quoted here in order to correct it | Wikipedia, "Troposkein" |
| DOCUMENTED | The alternate-foot jump is the "speed step" and raises jumps per minute over a basic jump | Wikipedia, "Skipping rope" |
| DOCUMENTED | Beaded ropes give audible feedback as the beads strike the ground — a real rope does touch the floor | Wikipedia, "Skipping rope" |
| DOCUMENTED | Speed ropes are thin vinyl cord or wire; licorice ropes are PVC; leather ropes are thicker | Wikipedia, "Skipping rope" |
| DOCUMENTED | IJRU was formed by the merger of FISAC-IRSF and the World Jump Rope Federation; worlds 2023 Colorado, 2025 Kawasaki | Wikipedia, "Skipping rope" |
| DOCUMENTED | Standard gravity g = 9.80665 m/s² | SI / CODATA defined value |
| DOCUMENTED | Aristoff, J. M. & Stone, H. A., "The aerodynamics of jumping rope", Proc. R. Soc. A 468(2139) 720–730 (2012), doi:10.1098/rspa.2011.0389 — existence and citation only | Crossref API |
| qualified | The troposkein is used to relieve stress in Darrieus vertical-axis turbine blades — but that axis is VERTICAL, with gravity along it, so its "with gravity" results do not transfer to a jump rope | Wikipedia, "Troposkein" |
| qualified | Ashwill & Leonard, Sandia Report 86(1085), 1986 — a turbine blade-shape report, listed in Wikipedia's references; we cite it, we did not read it | via Wikipedia, "Troposkein" |
| qualified | "Line segments spanned by a tangent circular arc" as the troposkein approximation — documented generally, measured here only at our own L/d values | Wikipedia, "Troposkein" |
| qualified | Crossflow drag coefficient C_d ≈ 1.1 — a textbook value for a smooth two-dimensional cylinder at Re ≈ 3×10³–10⁴, not for a rotating cord with a trailing wake | standard fluid-mechanics tables |
| MEASURED | Closed form, BVP shooting and the time-stepper agree on the zero-gravity shape: a = 0.8965074 / 0.8965172 m, Thand/Tmin = 6.97178 / 6.97183 | tools-harness.js, oracle A vs js/shape.js |
| MEASURED | Time-stepper discretisation error, averaged over a turn: +0.362 % at 24 segments, −0.109 % at 48, −0.107 % at 72; the whole radius profile within 0.15 % of a | tools-harness.js mesh study |
| MEASURED | The closed form matches an independent RK4 shot of y″ = −2βy√(1+y′²) to 1 part in 10¹³ | tools-harness.js |
| MEASURED | Best-fit circle misses the curve by 6.96 % of the amplitude at L/d = 2, 10.39 % at 3.70, 12.14 % at 6 | tools-harness.js shape fits |
| MEASURED | Best-fit catenary misses by 2.58 % / 3.05 % / 3.33 % | tools-harness.js shape fits |
| MEASURED | Wikipedia's segment-and-arc construction misses by 2.15 % / 3.06 % / 3.51 % — no better than the catenary | tools-harness.js shape fits |
| MEASURED | The turn-averaged shape is within 2.6 % of a even at 1.2 turns/s; gravity's leading effect is a once-per-turn breathing, not a change of mean shape | tools-harness.js rate sweep |
| MEASURED | 2 % breathing crossover: 1.590 turns/s at 1 g, 1.121 at ½ g, 2.251 at 2 g | tools-harness.js gravity control |
| MEASURED | Those three collapse onto G = g/(ω²a) = 0.0979, 0.0985, 0.0977; the 2 g / 1 g rate ratio is 1.4157 against √2 = 1.41421 | tools-harness.js gravity control |
| MEASURED | Limit curve without drag: a = 1.025181 m, exactly planar | js/shape.js |
| MEASURED | Limit curve with drag (5.0 mm cord): a = 1.008463 m, trailing 27.155°, 0.4603 m out of the handle plane | js/shape.js |
| MEASURED | That curve is identical at 3 and 7 turns/s in every printed digit while Thand rises 6.1715 → 33.6003 N, a factor 5.4440 against (7/3)² = 5.4444 | js/shape.js |
| MEASURED | Halving the cord to 2.5 mm halves the bow: 13.551°, 0.2392 m out of plane | js/shape.js |
| MEASURED | Drag moves the radius profile by at most 1.63 % of a, but the whole 0.46 m out-of-plane excursion is drag | js/shape.js |
| MEASURED | Drive-radius stall: at 3 turns/s the rope fails to lock at 0.05 m and below and locks at 0.10 m and above | tools-harness.js drive sweep |
| MEASURED | The tension ratio Thand/Tmin measured by the time-stepper converges on the predicted 1 + q as the mesh refines | tools-harness.js |
| MEASURED | The simulated rope's lowest point moves only 7 mm between 1.5 and 6 turns/s — the ground clearance is fixed by geometry, not by speed | tools-harness.js clearance sweep |
| DERIVED | First integral of the steady balance: √(1 + y′²) = 1 + (κ/2)(a² − y²), so the tension falls quadratically with radius | this app |
| DERIVED | Closed form y(x) = a·sn(βcx, k), k = a/c, c² = a² + 2/β | this app |
| DERIVED | The length–span relation L/d = ((q+2)E(k) − K(k))/K(k) with k² = q/(q+2) | this app |
| DERIVED | Amplitude a = d·√(q(q+2)) / (2K(k)) — so a is fixed by L/d alone and does not depend on ω | this app |
| DERIVED | Thand/Tmin = 1 + q and Tmin = μω²a²/(2q): the shape is fixed, the tension carries all the ω dependence | this app |
| DERIVED | Drag-to-centrifugal ratio = ½ρC_dD·r/μ — free of ω, which is why drag never becomes negligible | this app |
| DERIVED | G = g/(ω²a) is the only dimensionless group left once the shape is fixed; ω_c = 3.20·√(g/a) at the 2 % criterion | this app |
| DERIVED | A force applied on the rotation axis has zero moment about it, so a nonzero drive radius is necessary, not a refinement | this app |
| DERIVED | The bending boundary layer is √(EI/T) thick and T ∝ ω², so bending stiffness really does vanish as 1/ω | this app |
| DERIVED | Small-amplitude limit: q → 2(L/d − 1), a/d → 2√(L/d − 1)/π, and the curve becomes a plain half-sine | this app |
| CALIBRATED | Air density 1.20 kg/m³ (about 20 °C at sea level) | standard atmosphere |
| CALIBRATED | Rope length 1.95 m: chosen so the simulated cord's lowest point sits within about a centimetre of the floor at the axis height used — the real sizing constraint | this app, from the solver |
| CALIBRATED | Drive radius 0.13 m: above the measured stall threshold and inside the published span of speed-rope handle lengths | this app, from the solver |
| CALIBRATED | Structural damping is ZERO: aerodynamic drag turned out to be the only dissipation the cord needs, so nothing artificial is added and every measurement is of the bare model | this app, after the damping pass was found inert |
| RECONSTRUCTED | Rope linear density 0.030 kg/m | nobody publishes one (see the documented negative above) |
| RECONSTRUCTED | Cord diameter 5.0 mm | nobody publishes one |
| RECONSTRUCTED | Handle span 0.56 m between the two wrist centres | nobody publishes one |
| RECONSTRUCTED | Turning axis 1.00 m above the floor and 0.10 m in front of the body | nobody publishes one |
| RECONSTRUCTED | Speed-rope handle length 12–15 cm, used to justify the drive radius | retail practice, not a governing body |
| RECONSTRUCTED | Hop heights 0.100 m (speed), 0.230 m (doubles), 0.400 m (triples) | chosen for play |
| RECONSTRUCTED | Trailing-foot lift 0.10 m in speed step | chosen for play |
| RECONSTRUCTED | Miss stoppage 1.20 s — the rulebook deliberately sets none | chosen for play |
| RECONSTRUCTED | Spoken durations in the start sequence (2.20 s, 0.90 s, 1.00 s, 0.45 s); only the silences are specified | chosen for play |
| RECONSTRUCTED | The jumper's limb lengths, proportions and posture | chosen for the picture |
| RECONSTRUCTED | The floor-strike tick sound (the rulebook specifies only the three competition tones) | chosen for play |
| RECONSTRUCTED | The trip test: the cord is caught inside a 0.18 × 0.20 m box about the feet (the size of a pair of shoes, not of the jumper) and within 0.10 m of the sole; measured there, the cord sweeps under at 1.6 to 4.5 cm over 0.022 s | chosen for play |
About
Jump Rope is an independent reimplementation of nothing in particular — skipping rope is a folk activity thousands of years old, not a product, and it has no author, year or publisher to credit. What it does have is a governing body, the International Jump Rope Union, formed in 2018 by the merger of FISAC-IRSF and the World Jump Rope Federation; the counting, the event lengths, the deductions and the competition tones in this game are IJRU's, taken from IJRU Competition Rules 5.0.0, and they are reproduced here in the spirit of implementing a published rule, not of representing IJRU. This app is not affiliated with, endorsed by, or connected to IJRU in any way.
The rope itself is simulated, not animated: a 48-segment inextensible cord, driven at both ends by
the handles, loaded by gravity and by quadratic aerodynamic drag, made inextensible by position
projection, stepped four times per frame. A second, completely separate solver
(js/shape.js) finds the steady turning shape by Runge–Kutta shooting on the tension
equation in the co-rotating frame, and a third — a closed form in Jacobi elliptic functions — lives in
the test harness and never ships. All three agree to five or more figures. Everything in the bundle is
hand-written: there is no three.js, no physics library, no framework, and nothing is loaded from
anywhere else.
What this game is not
- It is not a judging system. There is one competitor and no panel, so no averaging of judges' scores and no head judge.
- It has no Double Dutch, no wheel, no freestyle, no team events, and no relay switches.
- It does not model the jumper's muscles, only a ballistic hop. The rope is the physics here.
- It quotes no world record, because IJRU publishes none we could reach.
- On a machine too slow to draw the rope at a decent frame rate, the game runs in slow motion rather than dropping physics steps: the loop advances at most 0.1 s of simulation per frame, so the cord stays inextensible and the heat simply takes longer in real time. Under a software rasteriser that is dramatic — a 30-second heat can take minutes.
What the tests caught
Nine bugs and three dead ends, all of them found by the harnesses rather than by looking at the screen. They are listed because a list of what nearly shipped is worth more than a claim that nothing did.
- Every mesh was inside out. The cylinder quads, the cylinder caps and the sphere quads all wound the wrong way, so the outward normals pointed inward on 100 % of faces. The check that caught it comes with a reversed-mesh control, so it is known to be able to fail.
- The rope was launched backwards into the oncoming handles. A sign error in the seeded spin made the cord rotate against the drive. The symptom was not "it goes the wrong way" — the handles dragged it round eventually — it was that the rope would not lock on below a large drive radius, which read exactly like an aerodynamic stall and produced a confident, wrong "minimum wrist circle" result that survived an hour and three parameter sweeps.
- The trip test was inverted, and only a browser found it. It asked for the cord's lowest point near the feet and called it a miss when that was BELOW the sole — which is a clean jump. The effect was perfectly disguised: a well-timed heat scored 24 and reported no misses, so every offline assertion was satisfied, while standing stock still through thirty seconds of turning rope was also scored as no misses at all. Driving the real page through the keyboard is what exposed it, because a jumper who does nothing has to lose. The test now asks whether any part of the cord is inside a box the size of a pair of shoes AND level with the soles, and the harness pins that sense with synthetic cord positions in both directions.
- The foot box was the size of the jumper, not of the feet. Reaching 22 cm fore and aft, it counted the cord while it was still 20 cm away and 14 cm up — a height no hop can clear, so every heat became miss, restart, miss. The cord is a V and it is lowest between the feet: measured inside a box 18 by 20 cm it sweeps under the soles at 1.6 to 4.5 cm, over 22 milliseconds.
- The cord could not be spun up from rest. Started dead and handed a turn rate, the handles never got it turning coherently: its radius wandered between 0.49 and 0.78 m for a full thirty seconds and it never came near the floor, so nothing could ever trip the jumper. A heat now begins with the cord already cast — and the shape it is cast in is the boundary-value solver's own answer, handed straight to the time-stepper, so it starts in its steady form instead of growing into one from a circular arc.
- The lead-in was already running when the page finished loading, so the first key a player pressed was scored as a false start, −10. A heat now sits idle until it is asked for.
- The structural damping did nothing at all. It was applied to the velocities after the positions had already been integrated, and the velocities are recomputed from the positions at the end of every substep, so the damped values were thrown away. Nothing in the physics changed when it was switched on or off, which is how a mutant caught it: replacing the dashpot with violently wrong lab-frame damping produced byte-identical output. Damping is now correctly ordered and set to zero, because it turned out the cord never needed it.
- One clause of our own counting code is provably dead. The rulebook's "stop counting until an alternation occurs" is already implied by the alternation test that precedes it: a landing whose foot equals the previous one is never countable anyway. Deleting the flag is an equivalence, and the harness carries that deletion as a negative mutant that must not be flagged. We kept the flag, because it maps to a sentence in the rulebook.
- The motion instrument hid a third of what it was built to measure. Fitting the rotation axis from every node biases it, because a node whose radius breathes traces a limaçon rather than a circle and its fitted centre is pulled off-axis by half the breathing. On a synthetic 8.0 % breathing it recovered 5.8 %. Fitting the axis from the handles alone — which really do move on exact circles — fixes it.
- Two of the oracle's own test expectations were wrong, and both would have made the oracle look broken rather than the engine. Working them out by hand, rather than adjusting them until they passed, is what turned them up.
- A detector fired on the real engine. A cheap tension-ratio check used in the mutant probes flagged the unmutated code, which would have made it look like a perfect mutant catcher while catching nothing. The suite now asserts, first and explicitly, that every detector passes the unmutated engine.
- A first-order integrator is nearly invisible in a shooting solve. Replacing Runge–Kutta with forward Euler moved the answer by one part in 100 000, because the shooting iteration simply re-aims the initial tension and absorbs the integration error. What gives it away is that a first-order step traverses exactly its step length every time, so the polyline reports the rope's length back exactly; a consistent high-order integrator comes up short by the curvature term. Suspicious exactness is the signature.
- Something we cannot resolve, and say so. The crossflow projection — using only the velocity component normal to the cord for drag, rather than the whole velocity — is worth 0.81 % of the trailing angle in this geometry, because a turning rope is nearly perpendicular to its own motion everywhere. The deterministic boundary-value solve can see that; the motion instrument, whose lag noise is several percent, cannot. The mutant for it is aimed at the solver for exactly that reason.
The headline, and how it had to be qualified
The usual argument says: As turn rate rises, gravity should become negligible beside the
centrifugal term, so the rope's shape should converge to a limit curve and stop changing with
speed — a curve that is neither a circle nor a catenary.
Every clause of that is right, and
the crossover turns out to sit below any rate a person skips at. But that argument
says nothing about bending stiffness, rope mass distribution, air drag, or the fact that the
hands move rather than being fixed points
, and of those four, two change the answer:
- Air drag changes the limit curve and never fades. Both drag and the centrifugal term are exactly quadratic in the turn rate, so the limit curve is drag-lagged and non-planar, by 27.155° and 0.46 m, at every speed. The curve you converge to is not the troposkein.
- Moving hands are not a refinement, they are the whole drive. Handles on the axis transmit no torque about it, so with truly fixed points the rope cannot be turned at all.
- Bending stiffness behaves exactly as the argument assumed: its boundary layer is √(EI/T) thick and T grows as ω², so it shrinks as 1/ω and really does vanish.
- A non-uniform cord changes the limit curve but not the convergence, because both sides of the balance carry the same ω² whatever the mass distribution is.
One more qualification the usual argument misses: with the axis horizontal there is no steady shape at all while gravity acts, so "the shape converges" has to be said about the right quantity. The turn-averaged shape hardly depends on rate in the first place; what converges is the once-per-turn breathing.
Credits
Rules and tones: IJRU Competition Rules 5.0.0. Background: Wikipedia's "Skipping rope" and "Troposkein" articles. The troposkein's name and its use in Darrieus turbine blades come from the latter; the specific blade-shape report it cites (Ashwill & Leonard, Sandia 86(1085), 1986) we cite but did not read. Aristoff and Stone's "The aerodynamics of jumping rope" (Proc. R. Soc. A 468, 720–730, 2012) is the obvious prior work on the drag question and we could not open it — Semantic Scholar reports it closed with the abstract withheld and the publisher's page answers HTTP 403 — so nothing in this app is attributed to it. Everything aerodynamic here was derived and measured independently, and may well duplicate or contradict theirs.
Ships as a single static bundle with no network calls, no analytics, no cookies and no accounts. Your best scores live in this browser's local storage and nowhere else.