Detail info
Complete feature guide for Tom’s Ballistics — inputs, libraries, trajectory physics, chart/table tools, preferences, export, and free recoil.
Feature highlights
Platform / UI
| Feature | Notes |
|---|---|
| Imperial / metric units | Toggle converts form values and all outputs; engine always integrates in imperial internally |
| Searchable caliber library | Combo search from calibers.json (name, aliases, diameter, category); blank = custom cartridge |
| Bullet library picker | Diameter → manufacturer → bullet; selecting autofills weight, length, BC, and drag model (all overwritable) |
| Sectional density | Live SD = weight ÷ (7000 × diameter²) |
| Drag-model visual picker | Silhouette thumbs for G1–G8, GL, and Custom (reference projectile shapes for each drag function) |
| Form-factor picker | When BC is empty (non-Custom): shape presets pick a drag model and estimate BC = SD / i |
| Custom drag table | Mach, Cd pairs (one per line); BC acts as a scale factor (1.0 ≈ absolute form factor 1) |
| Reticle / sight picker | Iron, peep, magnified, red-dot, holographic; SVG preview + chart holdover overlay; selector lists iron & peep first, then others sorted by name |
| Correction per click | Turret POI shift per click (in @ 100 yd or mm @ 100 m) → Drop/Wind Clicks columns |
| Live free-recoil panel | Updates as inputs change, before or after a full calculate |
| Results summary | Caliber, drag/BC, SD, Sg pill, opt/min twist, density ratio, atmosphere standard, Coriolis on/off, zero elevation MOA, aero jump MOA (when wind), twist, wind, muzzle TKO & PF |
| Interactive trajectory chart | Path vs LOS, velocity, and Sg vs range; hover tooltip + reticle hold |
| DOPE / truing card | Compact printable holds (MOA/MRAD/clicks) at common distances from the current trajectory; also via Download menu |
| Trajectory table | Column picker, font-size slider, Mach-bands toggle, deeper green row hover, Sg color bands |
| Cookie consent | Accept / Decline banner; reopen via Cookie settings in the footer |
| Location & weather | Atmosphere section button opens a picker (ZIP / address search via Open-Meteo + Nominatim postal lookup, GPS, Leaflet map). When a postal code matches multiple countries, a country dropdown filters results before apply. Current conditions from Open-Meteo multi-model best match fill temp, station pressure, humidity, elevation, latitude, wind speed, and clock wind direction from shooting azimuth |
Data libraries
| Source | Contents |
|---|---|
calibers.json | Searchable cartridge list (names, aliases, diameters, categories) |
data/bullets.json | Merged component / catalog library: MidwayUSA, JBM lengths, Sierra official G1/G7 catalog, manufacturer BC catalogs, BulletArc, commercial ammo scrapes, cast makers, and related sources; sibling BC backfill copies catalog BCs onto sparse picker rows; Litz-labeled rows get Bryan Litz / Applied Ballistics measured G1/G7 from the public Courtney (2012) tables plus Berger catalog siblings |
| Autofill preference | Uses G7 BC when both G1 and G7 exist; measured lengths can highlight vs typical averages |
data/drag_cd.json | Standard Cd vs Mach tables for G1–G8 and GL |
data/reticles.json | Iron, peep, scope, red-dot, and holographic catalogs for the hold overlay |
Inputs
| Group | Fields |
|---|---|
| Firearm / sight | Muzzle velocity, zero range, sight height, twist (1:N), twist direction (RH/LH), reticle, correction per click, firearm weight, powder charge (blank → estimate) |
| Ammunition | Manufacturer, bullet, weight, diameter, length, drag model, BC (or Custom scale), optional multi-band BC (fps, bc lines), form factor, custom Cd table |
| Atmosphere | ICAO or Army Standard Metro (BC density reference ρ₀); temperature, pressure, humidity, altitude; Apply standard conditions fills sea-level T/P/RH/alt for the selected standard; Location & weather… fills live station conditions via Open-Meteo |
| Coriolis | Optional latitude (+N / −S) and azimuth / shooting direction (0° N, 90° E); both required or Coriolis / Eötvös stay off |
| Target | Target distance, wind speed & direction (0 head / 90 right / 180 tail / 270 left), optional wind profile (range, speed, dir) and gust (±), shooting angle (+ incline / − decline), table step |
Atmosphere tip: leave pressure at the standard sea-level value to derive pressure from altitude.
Trajectory engine
Integrator: Heun (improved Euler) point-mass.
Drag: Cd vs Mach from standard tables or a custom curve; scalar or multi-band BC (velocity thresholds) scales the drag.
Atmosphere: ICAO or Army Standard Metro BC density reference (temp, pressure, humidity, altitude).
Zero: Elevation solved to zero range (spin ignored in the zero solve). Output always includes a sample at the zero distance.
Variables used in the flight path
| Variable | Used for |
|---|---|
| Muzzle velocity | Launch speed |
| Zero range | Sight elevation solve |
| Sight height | Initial path offset below LOS |
| Bullet weight | Energy, TKO, PF, sectional density, inertias, recoil |
| Bullet diameter | SD, TKO, inertias, area for MPM |
| Bullet length | Miller Sg, inertias (Iy) |
| Drag model + BC (or custom Cd) | Drag deceleration; optional multi-band BC by airspeed |
| Temperature, pressure, humidity, altitude | Air density / Mach / sound speed |
| Wind speed + direction (+ profile / gust) | Range & cross wind; layered wind by range; gust → ± windage band |
| Shooting angle | Incline / decline |
| Target distance + table step | Output sampling |
| Twist rate + direction | Launch spin, Miller Sg, MPM spin drift hand (RH/LH) |
| Latitude + azimuth (both required) | Coriolis / Eötvös; blank = off |
Derived / secondary physics
| Quantity | From |
|---|---|
| Atmosphere standard | ICAO or Army Standard Metro (BC density reference ρ₀) |
| Density ratio | Actual density / selected standard ρ₀ |
| Sectional density | Weight / diameter² |
| Miller / Berger Sg | Weight, diameter, length, twist, MV, atmosphere; fv floors near sonic (~1120 fps) |
| Opt / min twist | Same inputs for Sg 1.5 (optimal) and 1.3 (marginal) |
| Sg bands | ≥1.5 stable (high if ≥2), ≥1.3 marginal, else unstable |
| MPM spin drift | Twist, MV, Sg → CMα, yaw of repose, lift (CLα≈2); McCoy spin decay (Clp≈0.02); RH drifts right, LH left |
| Aerodynamic jump | Litz closed-form: MOA/mph ≈ 0.01·Sg − 0.0024·L + 0.032 (L in calibers); applied as launch elevation bias; hand follows twist; wind from the right → jump up for RH; zero solve ignores AJ |
| Coriolis / Eötvös | Latitude, azimuth, velocity (when both lat & az set) |
| Downrange Sg | Muzzle Sg × (MV / v)² × (p / p₀)² with spin decay |
| TKO | (grains × velocity × diameter) / 7000 |
| Power factor | (grains × velocity) / 1000 |
Outputs — chart, table, summary
| Surface | Contents |
|---|---|
| Chart series | Path vs LOS (with drop fill), velocity, Sg (dashed); fine dash at Sg 1.5; dashed LOS at zero height |
| Chart tooltip | Range, path, drop, velocity, energy, TKO, PF, Sg; reticle hold block with nearest mark |
| Table columns | Range (always on), Path, Drop, Wind, Spin, Vel, Energy, TKO, PF, Sg, TOF, Drop MOA / MRAD / Clicks, Wind MOA / MRAD / Clicks — plus Mach when Mach bands are on |
| Angles | True angular offset vs LOS: MOA = in × 100 / (yd × 1.047); MRAD = in × 100 / (yd × 3.6) |
| Windage | Aero + Coriolis + spin; Spin column shows spin-only drift; optional gust shows ± band on Wind |
| Table font | 9–28 px slider; auto-fits to panel width until you choose a size; choice is saved and restored (clamped so the table still fits) |
| Column visibility | Checkboxes above the table; selection saved with prefs (Range stays on) |
Mach bands
Toggle beside the font-size control. Uses the same local speed of sound as the trajectory engine (temperature + path-height lapse).
- Row colors by integer Mach band from ≥ Mach 10 down through Mach 1–2, plus subsonic (violet → green → amber)
- Mach column on every row (3 decimals)
- V0 Mach note under the column picker (muzzle Mach, band pill, local sound speed in fps)
- Crossing rows at each integer Mach from 10 down to 1 (subsonic) with interpolated full-line data
- Chart range axis colored by the same bands, with legend chips
Reticle overlay
Display only. Impact / hold is recomputed from path vs LOS at the hover range. Hold is on (0) at the zero distance — never at the muzzle. Trajectory output always includes a sample at the zero range so short zeros (e.g. 25 yd with a 50 yd step) stay correct.
Categories: iron, peep, magnified (scope, FFP/SFP), red-dot, holographic — MOA or MRAD catalogs. The sight selector lists iron and peep first, then other sights sorted by name. Hover shows hold over / under and wind hold, plus the nearest hash or dot mark (where applicable).
Drop MOA / MRAD are true angles at that range: MOA = inches × 100 / (yards × 1.047). At 100 yd, 1 MOA ≈ 1.047″; at 1 yd, 1 MOA ≈ 0.01″ — so a 1.4″ sight-height offset near the muzzle is ~134 MOA, not a math error.
Free recoil
Separate from the trajectory solve; evaluated at muzzle velocity (V0) only. Gas model uses an effective powder-gas velocity of 4700 fps.
| Variable | Role |
|---|---|
| Firearm weight | Gun mass |
| Bullet weight | Projectile mass |
| Powder charge | Optional; else estimated from caliber / load heuristics (field fills when estimated) |
| Muzzle velocity | Recoil velocity at V0 |
Outputs: free-recoil impulse, velocity, and energy, with a short method note
Saved preferences
| Item | Behavior |
|---|---|
| Consent | Accept stores prefs; Decline keeps the session only and clears stored prefs |
| Form fields | All named calculator inputs are saved and restored on the next visit |
| Display prefs | Table columns, chosen font size (and user-lock), Mach-bands on/off |
| Storage | Cookie tba_prefs (1 year) plus a full localStorage backup for large payloads (e.g. custom drag) |
Export
After Calculate: Download chart & table as JPG, PDF, or CSV (Letter when imperial, A4 when metric for PDF). CSV downloads the trajectory table (all columns present, including Mach when bands are on). Filename uses caliber and drag model. Hover UI and the column picker are hidden while capturing JPG/PDF.
Explicitly not modeled
- True 6‑DOF attitude dynamics
- Muzzle flip / tip-off (gun dynamics)
- Flat-base bullets are poorly represented by the Miller length model
- Coriolis when latitude or azimuth is blank