The 3D sim never computes how one shed ring affects another: each ring just convects backward at speed U and sinks at a hand-picked constant sinkRate = 0.28 + 0.5·Γ_norm, independent of every other ring in the wake. This 2D companion removes that shortcut. A vortex ring, cut by the vertical plane containing the flight direction, appears as exactly two point vortices of equal-and-opposite circulation ±Γ where the filament crosses the plane — so each shed ring here is such a pair, and its motion (plus every other pair's motion) is obtained frame-by-frame from the real 2D Biot-Savart law, summed over every vortex currently in the wake:
velocity induced at vortex i by vortex j (circulation Γⱼ, offset (dx,dy)=i−j):
u += −Γⱼ/(2π) · dy / r² v += Γⱼ/(2π) · dx / r² (r² floored at a small core radius)
vortex i's total velocity = freestream(−U, −w̄) + Σⱼ≠ᵢ (induced by j)
w̄ = L / (2ρUA_ring) (Rankine–Froude actuator-disk downwash, same L as the lift readout)
Two things fall out of this that the 3D sim cannot show. First, an isolated pair's own mutual induction makes it self-propel horizontally at exactly Γ/(2πd) — this is the textbook vortex-pair translation speed, not an assumption; a standalone check integrating the pair's equations of motion for 2 seconds reproduces the analytic value to machine precision. Second, once several rings are in the wake, each one's trajectory is measurably bent by the field of every ring shed before it — real many-body interaction, the same mechanism responsible for vortex-ring "leapfrogging" in real fluids — rather than each ring being an independent, pre-scripted object.
- Forward airspeed U — sets the freestream that convects every vortex backward relative to the bird, exactly as in the 3D sim.
- Wingbeat frequency f — how often a new counter-rotating pair is shed; sets ring spacing λ = U/f.
- Stroke amplitude θ — sets the vertical separation d between each pair's two vortices (the ring's diameter), which sets both its self-propagation speed and its induced field strength on its neighbours.
- Bound circulation Γ — the strength of each vortex; scales lift, the momentum-theory downwash w̄, and the pair's own self-induced speed.
- Velocity field toggle — draws the real net Biot-Savart field (freestream excluded) sampled on a grid, so you can see the flow the wake itself is inducing, not just the vortex markers.
Verified numerically (standalone Node script, not shipped in this page): the simulated pair self-propagation speed matches Γ/(2πd) to 0.000% relative error across four (Γ,d) combinations; the momentum-theory w̄ evaluates to physically sensible fractions of U (roughly 6–20% of U across the slider ranges); and a second ring shed 0.2 s after the first is measurably displaced (~0.14 m after 2.8 s) relative to how it would move in isolation — proof the mutual-induction term is doing real work, not just decorating independent trajectories. Total circulation across all vortices stays exactly zero throughout, as it must.