Physics · Fluid Dynamics
·
⏱ ~13 min read
Ballistics and Aerodynamic Drag — From Cannonballs to Supersonic Projectiles
Galileo's ideal parabola is only the start. Real projectiles experience drag that varies non-linearly with speed, a turbulent regime change near Mach 1, Magnus force from spin, Coriolis deflection over long distances, and air density that halves every ~5.5 km. Understanding the full point-mass ballistic model — with a Mach-dependent drag coefficient, ISA atmosphere, and fourth-order Runge-Kutta integration — explains why snipers correct for wind, temperature, and latitude, and why ballistic missiles follow shallow launches to maximise range.
1. Drag Force and the Drag Coefficient
Drag force (in direction opposing velocity): F_D = ½ · ρ · v² · C_D ·
A ρ = air density (kg/m³), v = speed (m/s), C_D = drag coefficient
(dimensionless), A = reference frontal area (m²) — typically πd²/4
Deceleration due to drag: a_drag = F_D / m = (ρ · v² · C_D · A) / (2m)
Reynolds number determines flow regime: Re = ρvd/μ where μ = dynamic
viscosity ≈ 1.81×10⁻⁵ Pa·s Sphere C_D: Re < 1000: C_D ≈ 24/Re +
6/(1+√Re) + 0.4 (Schiller-Naumann) Re = 1000–2×10⁵: C_D ≈ 0.44
(inertia dominated) Re > 2×10⁵: C_D ≈ 0.10 (turbulent BL, drag crisis
— e.g. golf ball dimples)
2. Mach-Dependent C_D and Transonic Drag Rise
Mach number: M = v / a_sound where a = √(γRT) ≈ 340 m/s at 15°C C_D
regime (streamlined projectile): M < 0.8 (subsonic): C_D ≈ 0.15–0.25 M
0.8–1.2 (transonic): C_D peaks at 0.4–0.6 (wave drag) M > 1.2
(supersonic): C_D ≈ 0.35–0.55 and declines with M Drag coefficient vs
Mach — empirical piecewise (G7 bullet model): M < 0.8: C_D = 0.18 M
0.8–1.0: C_D = 0.18 + 1.2(M−0.8)² (rapid rise near M=1) M 1.0–1.2: C_D
= 0.42 − 0.5(M−1.0) M > 1.2: C_D = 0.32 − 0.03(M−1.2) Wave drag
source: shock wave forms at body nose and base Wave drag coefficient ≈
4/(γM²) · sin²θ_shock (cone-angle θ) → Sharper nose → weaker shock →
less wave drag → boat-tail designs
3. Ballistic Coefficient and Sectional Density
Ballistic Coefficient (BC): BC = m / (C_D · A) [kg/m²] Higher BC →
less drag deceleration for same initial speed Heavier, narrower, more
aerodynamic projectile → higher BC Sectional density (SD): SD = m / d²
(where d = calibre in inches, m in grains) SD relates mass to
cross-section; flat-nosed bullets have lower BC than spitzer (pointed)
designs of the same SD G1 vs G7 reference models: G1: flat-base
blunt-nose reference projectile (historical artillery) G7: long-range
boat-tail pointed (modern high-BC rifle bullets) BC_G7 ≈ 0.3–0.65 for
typical long-range bullets BC_G1 ≈ 0.45–0.90 for same bullets
(different reference curve) Time of flight / velocity retention: v(t)
≈ v₀ · exp(−(ρ·A·C_D)/(2m) · v₀t) (constant-CD approximation)
4. ISA Standard Atmosphere
ISA troposphere (0–11 km): T = 288.15 − 6.5·h/1000 [K], h in m
Pressure: P(h) = 101325 · (T/288.15)^5.2561 [Pa] Density: ρ(h) = P(h)
/ (287.05 · T) [kg/m³] ρ(0) = 1.225 kg/m³ (sea level) ρ(5500m) ≈ 0.736
kg/m³ (≈ 60% of sea level) Speed of sound: a = √(γRT), γ=1.4, R=287
J/(kg·K) a(0°C) = 331.3 m/s, a(15°C) = 340.3 m/s, a(−50°C) = 299 m/s
High-altitude effect on range: lower ρ → less drag At 1500 m elevation
(5000 ft): ρ ≈ 1.05 kg/m³ (−14%) → bullet retains velocity longer →
~3% longer range Shooters at high altitude must correct
points-of-impact upward
5. Point-Mass Trajectory Equations
State vector: [x, y, z, vx, vy, vz] Acceleration components: a_x =
−(F_D/m)·vx/v + F_M_x/m + F_Cor_x/m a_y = −(F_D/m)·vy/v + F_M_y/m +
F_Cor_y/m − g a_z = −(F_D/m)·vz/v + F_M_z/m + F_Cor_z/m F_D =
½ρv²C_D(M)A (direction: opposite v) g = 9.80665 m/s² (varies ±0.05%
with latitude) RK4 integration: k₁ = f(t, s) k₂ = f(t+h/2, s+h/2·k₁)
k₃ = f(t+h/2, s+h/2·k₂) k₄ = f(t+h, s+h·k₃) s(t+h) = s(t) +
h·(k₁+2k₂+2k₃+k₄)/6 Time step: dt = 0.001–0.01 s (0.001 s for
supersonic projectiles)
6. Spin Drift, Magnus, and Coriolis
Magnus effect (spinning projectile): F_M = C_M · (ρ/2) · v · A · (ω ×
v̂) Right-hand twist rifle: spin axis ≈ velocity axis → gyroscopic
precession causes slow yaw → right spin drift at range Spin drift
approximation: SD(range) ≈ 1.25 · (1 + 4/stability) · twist_inches⁻¹ ·
range² [inches/100yd²] Coriolis deflection (per axis): F_Cor = −2m(Ω ×
v) Ω = 7.292×10⁻⁵ rad/s (Earth rotation) Effect at 1000 m
(horizontal): ≈ 4–8 cm rightward in NH at mid-latitudes Vertical
Eötvös: +v_E·2Ω·sin(lat) — affects elevation at any range Aerodynamic
jump: initial bullet yaw from wind gust → lateral deviation At 1000 m,
10 mph crosswind → 1–2 MOA (≈28–55 cm) lateral
7. JavaScript Ballistic Trajectory Simulator
// Point-mass ballistic trajectory with ISA atmosphere + Mach-CD model
function isaAtmosphere(h) {
const T = Math.max(216.65, 288.15 - 0.0065*h);
const P = 101325 * Math.pow(T/288.15, 5.2561);
const rho = P / (287.05 * T);
const a = Math.sqrt(1.4 * 287.05 * T);
return {rho, a}; // density kg/m³, speed of sound m/s
}
function dragCoeff(Mach) {
if (Mach < 0.8) return 0.18;
if (Mach < 1.0) return 0.18 + 1.2*(Mach-0.8)**2;
if (Mach < 1.2) return 0.42 - 0.5*(Mach-1.0);
return Math.max(0.15, 0.32 - 0.03*(Mach-1.2));
}
function ballisticTrajectory({
v0, angleDeg, mass, diameter, dt = 0.002
}) {
const angleRad = angleDeg * Math.PI / 180;
const A = Math.PI * (diameter/2)**2;
const g = 9.80665;
let x=0, y=0;
let vx = v0*Math.cos(angleRad), vy = v0*Math.sin(angleRad);
const path = [{x, y}];
while (y >= 0) {
const v = Math.hypot(vx, vy);
const {rho, a} = isaAtmosphere(y);
const Mach = v / a;
const Cd = dragCoeff(Mach);
const Fd = 0.5 * rho * v*v * Cd * A;
// RK4 sub-step (simplified Euler here for brevity)
const ax = -(Fd/mass) * (vx/v);
const ay = -(Fd/mass) * (vy/v) - g;
vx += ax * dt;
vy += ay * dt;
x += vx * dt;
y += vy * dt;
if (path.length % 50 === 0) path.push({x, y});
}
return path;
}
// Example: 7.62×51 NATO at 800 m/s, 30° elevation
const traj = ballisticTrajectory({
v0: 800, angleDeg: 30, mass: 0.0104, diameter: 0.00762
});
console.log(`Range: ${traj[traj.length-1].x.toFixed(0)} m`);
// Vacuum 30° → 32.7 km; with drag → much less
8. Range Optimisation and Real Corrections
Optimal launch angle in vacuum: θ_opt = 45° (max range = v₀²/g) With
drag: θ_opt drops below 45° Low-drag projectile (M=3): θ_opt ≈ 40°
High drag (musket ball): θ_opt ≈ 30–35° Reason: at high angles extra
flight time → more drag work done Artillery corrections summary:
Muzzle velocity: −5 m/s → −3% range correction Temperature −10°C: air
denser → −1% range Wind 5 m/s cross: lateral deflection ≈ 0.1 mrad ×
range Altitude +1000m: +0.5% range (lower density) Coriolis at 45°N:
rightward drift ~4 cm at 1000 m (NH shooter) Precision rifle: Modern
exterior ballistics software (Applied Ballistics, Hornady 4DOF)
numerically integrates full 6DOF equations including gyroscopic
stability, yaw of repose, Coriolis/Eötvös in all axes to predict
sub-cm point of impact at 1–4 km ranges.