Article
Physics · Fluid Dynamics · ⏱ ≈ 13 хв читання

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.
🚀 Open Orbital Mechanics →