# Crosswind jump (Spin model)

How the Spin model works out the small up or down kick a crosswind at the muzzle gives the bullet: from its spin, shape and lift by the classical theory, by the app's earlier form of it, or from a formula of its stability and length.

## Generated table

**Setting:** Crosswind jump (Spin model)

| Choice | Used by |
|---|---|
| Classical theory (Standard) | Standard, Physics, Classic, Spin |
| Original form | Custom only |
| Classic (from stability and length) | Custom only |

## What it does

This setting matters only to the Spin model (see [dynamics](dynamics.md)); the point-mass models use [aeroJump](aeroJump.md) instead, and the two are never added. A crosswind at the muzzle tilts the air that meets the leaving bullet by a small angle, and a spinning bullet answers a tilt not by turning toward the wind but with a small kick up or down: up for wind from the right with a right-hand twist, down for wind from the left. The kick is set at the muzzle and carries on as a fixed angle, so it moves the come-up by the same angle at every range, and only when there is a crosswind there.

- **Classical theory (Standard)** (`'textbook'`, the default in every model since `solver-12`): the kick is worked out from the bullet's spin, how hard it is to spin, and how its tilt turns into lift and an overturning push, using the coefficients the Spin model is already using. This is the result the textbooks give.
- **Original form** (`'linear'`): the form this app used until `solver-12`. It is the classical result divided by a number that measures how hard the bullet is to tip, so it is too small on a long bullet and too large on a short one. It is kept so that results recorded under it can be repeated.
- **Classic (from stability and length)** (`'spinref'`): the kick is Litz's published formula, computed from the bullet's stability at the muzzle and its length, and then scaled down by a fixed fraction a little under one. It is built to follow the spin reference's output, and the app offers it under the Custom model only.

## When to choose it

Leave it on the default to have the jump worked out from the bullet's own coefficients by the classical theory. Choose "Original form" only to repeat a result from before `solver-12`. Choose the last value only to compare with another ballistics app whose crosswind kick it follows, or when you trust Litz's formula more than the estimated coefficients for your bullet. The values can differ by a third or more, in either direction, depending on the bullet: the first two use the coefficients and the bullet's shape, so an estimated coefficient changes them; the last changes only with the stability and the length. They differ by a few hundredths of a mil per 10 mph on the shots below, and none does anything with no crosswind at the muzzle. A wind from dead ahead or behind has no crosswind component, so the table below shows zero there.

## How to picture it

Think of the bullet as a spinning top leaving the barrel in a gust from the side. The top is pointing along the bore, but the air now comes from about a quarter of a degree off to the side (for 10 mph at a muzzle velocity of 3,048 fps), so the bullet is tilted to the air by that small angle. A tilted bullet is pushed by lift, and the lift turns the path. A top does not tip over when pushed: it precesses, wobbling around the line of the air with a slow wobble that dies down. The sideways push averages out over the wobble, but the push at right angles to the tilt does not, and what is left is a small net turn of the path up or down, fixed once the wobble has settled. A diagram would show the bullet leaving the muzzle with its nose a hair off the air's direction, the wobble as a small spiral around the new direction of flight, and the path bent by a small fixed angle. The last value skips the wobble: it reads the angle off a formula in the bullet's stability and length.

## The math

Every value gives one angle $J$ in mil (positive: the impact moves up), worked out once at the muzzle and applied to every range.

| Symbol | Meaning | Unit |
|---|---|---|
| $J$ | the jump: the up (positive) or down kick of the path | mil |
| $w_c$ | crosswind component at the muzzle, from the right positive | m/s (mph in the Litz form) |
| $V_0$ | muzzle velocity | m/s |
| $M_0$ | muzzle Mach number, $V_0/c_0$, with $c_0$ the speed of sound at the rifle (the moist-air value or the dry one, by the `soundSpeed` option, from the air the `vapour` option makes) | none |
| $\rho_0$ | exact moist-air density of the station air at the rifle (the `vapour` option sets its vapour; `airDensity`, `lapse` and `tempClamp` do not change it) | kg/m³ |
| $m,\ d$ | bullet mass and diameter | kg, m |
| $I_x,\ I_y$ | moment of inertia about the axis and across it; a ratio times $m d^2$ | kg m² |
| $p_0$ | muzzle spin rate, $\pm 2\pi V_0/\tau$ with $\tau$ the twist length in metres per turn, plus for a right-hand twist | rad/s |
| $C_{L\alpha},\ C_{M\alpha}$ | lift and overturning-moment slopes of the coefficient set in use, at $M_0$ (shapes in [dynamics](dynamics.md)) | 1/rad |
| $\mathrm{Sg}_0$ | gyroscopic stability factor at the muzzle | none |
| $l$ | bullet length in calibers, the full length over the diameter (a tip counts) | none |
| $w_{mph}$ | crosswind component in mph, from the right positive | mph |
| $s$ | $+1$ for a right-hand twist, $-1$ for a left | none |

**The crosswind component.** With one simple wind, $w_c$ is the near wind (the first speed of the two) times $\sin$ of the direction it comes from (0° ahead, 90° from the right). With a list of wind segments it is that of the first segment that starts at or before the muzzle and ends beyond it (speed times the sine of its direction), and zero if no segment covers the muzzle. The far wind and winds further out do not enter.

**Standard (`'textbook'`): the classical linear theory.** A crosswind gives the leaving bullet an initial yaw $w_c/V_0$, and the classical result for that case (McCoy, *Modern Exterior Ballistics*, §12.9, equation (12.98); Murphy, BRL Report 1216, equation (10.5)) is

$$J_{\text{textbook}}=\frac{I_x}{m\,d^{2}}\,\frac{C_{L\alpha}(M_0)}{C_{M\alpha}(M_0)}\,\frac{p_0\,d}{V_0}\,\frac{w_c}{V_0}\times 1000$$

The sign comes from $p_0$ (twist) and $w_c$ (side). It uses the coefficients and the axial inertia the flight uses, as the Spin block's choices leave them (`magnus` changes nothing here; `subsonicLift` matters only when the muzzle Mach number is near or below one); no air density enters (it cancels between lift and moment), and the transverse inertia $I_y$ does not appear.

**Original form (`'linear'`).** The form built first carries $I_x/I_y$ where the classical result has $I_x/(m d^2)$:

$$J=\frac{I_x}{I_y}\,\frac{C_{L\alpha}(M_0)}{C_{M\alpha}(M_0)}\,\frac{p_0\,d}{V_0}\,\frac{w_c}{V_0}\times 1000 \qquad J_{\text{textbook}}=J\cdot\frac{I_y}{m\,d^{2}}$$

The transverse inertia $I_y$ cancels in the classical derivation: the factor $I_y/(m d^2)$ in front of the lift-to-moment ratio meets $I_y$ in the spin term $(I_x/I_y)\,p d/V$. The two forms therefore differ by the factor $I_y/(m d^2)$, which is above one for a long bullet and below one for a short one.

**Classic (`'spinref'`): Litz's formula scaled.** The muzzle stability is built from the coefficient set (not Miller's formula). It is the stability the flight reports at the start only when `airDensity` is `'moist'`: under `'baseline'` the flight's own value uses the drag density, and this one always uses $\rho_0$ above:

$$\mathrm{Sg}_0=\frac{2\,I_x^{2}\,p_0^{2}}{\pi\,\rho_0\,d^{3}\,I_y\,V_0^{2}\,C_{M\alpha}(M_0)}$$

and with Litz's regression of crosswind jump on stability and length (also in [aeroJump](aeroJump.md); MOA per mph, 1 MOA = 0.290888209 mil)

$$J=\kappa\,\big(0.01\,\mathrm{Sg}_0-0.0024\,l+0.032\big)\;w_{mph}\;(0.290888209)\;s$$

with $\kappa=0.861$, a fixed fraction of the solver. There is no floor or cap on the bracket.

**Where it lands in the come-up.** For every range $r$: the row's elevation before corrections is $E_r$; then $E_r-J$ is multiplied by the profile's drag-scale factor at the Mach of that row and divided by the profile's scope factor. Windage is not touched.

## The algorithm

Where it runs: in the function that builds a range card, after the flight is flown and the elevations are found; it does not change the flight.

```text
muzzleJump(options, solve inputs) -> mil
  1. if the resolved dynamics is not 'mpm': this option is not used
        (point mass: aeroJump; 'mpm-empirical', including a set whose source is empirical: the set's own formula)
  2. (rho0, c0) = station air at the rifle, height 0: exact moist density; c0 dry or moist by soundSpeed;
        the vapour option changes the air itself; airDensity, lapse and tempClamp make no difference at height 0
     M0 = muzzle velocity / c0
  3. w_c = crosswind component at the muzzle (simple wind: near wind speed * sin(direction);
                                              segments: the first covering the muzzle, else 0)
  4. if this option is 'spinref':
         Sg0 = mpmMuzzleSg(coefficients in use, rho0, V0, M0)
         return kappa * Litz(Sg0, length / diameter, w_c in mph, twist hand)
  5. else if this option is 'linear':
         return linearTheoryJumpMil(coefficients in use, M0, V0, w_c in mph)
  6. else ('textbook'):
         return textbookJumpMil(coefficients in use, M0, V0, w_c in mph)

each row r:
  E = drop / range, or the dialed elevation        (angle option)
  E = (E - J) * dsf(Mach of the row) / scope factor
```

The Spin model falls back to point mass when the bullet is under 2 calibers long (a missing or non-positive length is refused earlier; see [dynamics](dynamics.md)); then `aeroJump` applies and this option does nothing.

## On a real shot

Read from the table below; every decimal in these sentences is copied from it. All columns are the Spin model with public estimated coefficients and a 10 mph crosswind from the right, except the fourth, whose wind is from dead ahead; each row is a change from the classical form. The original form asks for +0.042 mil more elevation on the monolithic tipped bullet and +0.028 on the lead-core bullet (north, level): its jump is smaller, so the impact moves up less and more elevation is dialed. The formula-based value differs from the classical form by less and in both directions: +0.007 on the monolithic bullet and -0.009 on the lead-core one. The windage and speed changes are 0.000 and 0.0, as The math says: the jump is an elevation angle only, and it does not change the flight. East and the uphill shot give the same +0.028 and -0.009 as north and level, since the jump is one angle at the muzzle that depends on the crosswind component, not on the range or the slope. With the wind from ahead there is no crosswind component, so every change is 0.000: no value gives a jump. The gap between the first two rows is the factor $I_y/(m d^2)$ of The math, which the original form divides by and the classical form does not.

**Each value as a change from the Spin model**

The shot: a 350 gr 0.375 in bullet at 3048 fps muzzle velocity, fired at 3520 yd in air of 60 °F, 40 % humidity, 24.43 inHg at the firing line, latitude 42.1°, wind as the column heads say; site altitude 5,500 ft. In the app, type it as "Site altitude" (shown when the profile's model reads one); left blank, the classic values count from sea level and can differ from this table. All other settings are the Spin model's. In the first column (North, level, monolithic tipped bullet, 10 mph from the right) the reference arc reaches 220 ft above the line of sight at 2150 yd. Compared with the first column, the bullet differs in "North, level, 10 mph from the right", "East, level, 10 mph from the right", "North, level, 10 mph from ahead" and "North, 10° uphill, 10 mph from the right".

| Value | Shown in the app as | North, level, monolithic tipped bullet, 10 mph from the right | North, level, 10 mph from the right | East, level, 10 mph from the right | North, level, 10 mph from ahead | North, 10° uphill, 10 mph from the right |
|---|---|---|---|---|---|---|
| `'textbook'` | Classical theory (Standard) | reference | reference | reference | reference | reference |
| `'linear'` | Original form | +0.042 / 0.000 / 0.0 | +0.028 / 0.000 / 0.0 | +0.028 / 0.000 / 0.0 | 0.000 / 0.000 / 0.0 | +0.028 / 0.000 / 0.0 |
| `'spinref'` | Classic (from stability and length) | +0.007 / 0.000 / 0.0 | -0.009 / 0.000 / 0.0 | -0.009 / 0.000 / 0.0 | 0.000 / 0.000 / 0.0 | -0.009 / 0.000 / 0.0 |

Each cell is the change from the reference row (`'textbook'`) in the same shot, as elevation (mil) / windage (mil) / velocity at the target (fps). Elevation: plus means more elevation must be dialed. Windage: plus means the windage correction moves to the right (dial further right); this is a correction, not where the bullet lands. Velocity: plus means the bullet arrives faster. A zero means no difference at the shown precision.

---

[All reference pages](../index.md)
