RikaNV Reference Ballistic Calculator

v0.0.0 · build

Results

Drop
Drift (total)
Time of flight
Stability SG
Energy at target
at target

Trajectory

Drop table

Distance, m Drop, cm Drop, mil Drift, cm Velocity, m/s Mach Time, s Energy, J

Multi-BC (Dynamic BC) — how it works in this calculator

Multi-BC describes how the ballistic coefficient of a bullet changes with speed. The "Dynamic BC" toggle in the Corrections section turns on a piecewise-linear correction for the G1 and G7 drag models. Open the block below for the full story.

📘 Multi-BC: what it is, how the calculator handles it, how to use it

What is the ballistic coefficient (BC)

BC is a number that says how well a bullet "punches through air" compared with a reference projectile. The higher the BC, the more slowly the bullet loses velocity and the less it drops downrange. Formula: BC = mass / (diameter² · form_factor), where the form factor is the ratio between the bullet's real drag profile and the reference one.

Why BC is not constant

In reality BC drifts a little with speed. When the bullet crosses the speed of sound (≈ 340 m/s under standard conditions), the flow around it changes dramatically: in supersonic flight a cone of shock waves forms; in subsonic flight the flow is smooth-then-vortex. For most match bullets BC drops by 5–15 % between the muzzle and the moment of crossing the sonic barrier.

A calculator that uses a single BC for the whole trajectory either over- or under-predicts depending on which part of the flight you care about.

Three industry approaches

1. Sierra Multi-BC (G1 + several BC values). Sierra Bullets — the oldest American match-bullet maker — publish not one BC but an array of BC values for different velocity bands. Example for .308 168 grain SMK:

  • above 792 m/s: BC = 0.462
  • 640–792 m/s: BC = 0.447
  • 549–640 m/s: BC = 0.424
  • below 549 m/s: BC = 0.405

The calculator looks up the current velocity at every step and switches BC to the matching band. Accurate at long range. Downside: you need a Sierra catalogue — most other makers publish a single averaged BC.

2. Litz / G7 (one BC, but the right drag model). Bryan Litz (Applied Ballistics) proposed a different fix: use the G7 drag model instead of G1. G7 is a reference projectile shaped more like a modern match bullet — long, slender, boat-tail. Logic: BC drifts with speed mostly because G1 doesn't match modern bullet shapes. If the reference looks like the real bullet, the non-linearity is small and one G7 BC is enough. Today G7 + single BC is the long-range gold standard.

3. Hornady 4DOF / Custom Drag Model. The most accurate approach. Hornady measures the drag curve of every bullet directly with a Doppler radar on real firings — no reference projectile at all. In their 4DOF app there is no "BC" concept — there is a full Cd(M) profile (drag coefficient as a function of Mach number) for each bullet. Downside: only works for bullets Hornady have actually measured.

What this calculator does — piecewise-linear dynamic BC factor

The calculator supports all six standard reference drag models (G1, G2, G5, G6, G7, G8). The Litz approach (G7 + single BC) works out of the box.

On top of that we implement a 4th approach — a piecewise-linear dynamic BC factor. It's not a Sierra-style table of 3–4 BCs and not Hornady's CDM, but a math function that on every integration step adjusts the effective BC depending on the current bullet velocity. Toggle "Dynamic BC" in the Corrections section to enable it.

The function shape — piecewise-linear with separate constants for G1 and G7. For G7 (typical modern match scenario):

  • Above hypersonic threshold (Mach > 2.5) — factor = 1.0 (no correction; faster than typical bullets)
  • Supersonic (1.8–2.5) — factor falls linearly from 1.0 to 0.965 (small correction ~3.5 %)
  • Trans-sonic (1.2–1.8) — factor falls from 0.965 to 0.905 (~6 %)
  • Around the speed of sound (1.0–1.2) — factor drops from 0.905 to 0.87 (sharp zone, ~4 % over a narrow range)
  • Subsonic (Mach < 1.0) — factor ≈ 0.87 (stable correction)

Effect: with the toggle on, the effective BC grows as the bullet slows down (BC_effective = BC_user / factor). This compensates for the drag rise when the bullet crosses the sound barrier and gives more accurate predictions at long range.

Important limitation: the dynamic BC factor is implemented only for G1 and G7. For the other drag models (G2, G5, G6, G8) the toggle does nothing — there are no calibrated constants for them, so the factor would just return 1.0.

Comparison with industry approaches

Our implementation is a hybrid: G1/G7 as base drag models (like Sierra / Litz), but with a piecewise-linear BC correction on top, instead of a switching table over multiple BC values. Lighter than Sierra (no per-bullet table), more accurate than single-BC for long-range work.

Side-by-side:

  • Sierra multi-BC table — 3–4 BC values per bullet, one per velocity band. Very accurate at long range, but you need the manufacturer's data.
  • Litz G7 + single BC — the simplest accurate approach for modern match bullets.
  • Hornady CDM (4DOF) — full drag curve from Doppler radar. Most accurate, but limited to the bullets they measured.
  • Piecewise-linear (this calculator) — middle ground between accuracy and simplicity.

Practical advice

For modern match bullets (.308 SMK, .338 Lapua, 6.5 Creedmoor ELD-M, etc.) — pick G7 drag model, enter the manufacturer's G7 BC, and turn on "Dynamic BC". That gives the best accuracy at long range. At 1000 m for typical sniper combinations the difference between "no dynamic" and "with dynamic" is 15–25 cm of drop — noticeable for point-target shooting.

How Multi-BC works step by step (under the hood)

The calculator uses explicit Euler integration with a fixed downrange step (typically 5 cm at 1000 m target). The trajectory is built as a long sequence of small steps. For an 800 m target that's about 16 000 steps; everything is recomputed at every step.

What happens at each step:

  1. Read current bullet velocity components (vx, vy, vz)
  2. Atmosphere at current altitude (density ρ, speed of sound c)
  3. Mach number: M = v_current / c
  4. Drag coefficient Cd — quadratic interpolation in the drag table (G1, G7, …) at M
  5. If Multi-BC is on: compute the factor from the piecewise formula above and divide Cd by it (effectively raising BC)
  6. Drag acceleration: a_drag = (ρ/ρ_std) · k_const · Cd · v_rel
  7. Gravity: −9.80665 m/s² along y (scaled by cos(slant) if shooting up/downhill)
  8. Coriolis (if enabled): −2 · (ω × v)
  9. Time step: dt = step / vx
  10. Update velocity: v_new = v − dt · (a_drag + a_grav + a_cor)
  11. Update position: pos_new = pos + dt · v_new (semi-implicit Euler)
  12. Accumulate TOF: TOF += dt

Concrete example — .308 168 gr SMK at 800 m (G7 BC = 0.218, MV = 817 m/s, standard atmosphere):

Distance v_current (m/s) Mach factor (G7) Drop, no Multi-BC Drop, with Multi-BC Δ
100 m7582.220.986−10 cm−10 cm~0
300 m6701.970.973−84 cm−83 cm+1 cm
500 m5931.750.960−255 cm−250 cm+5 cm
700 m5241.550.940−551 cm−535 cm+16 cm
800 m4921.460.931−748 cm−722 cm+26 cm

Note the trend: at 100 m the factor is 0.986 (~1.4 % correction); at 800 m it's already 0.931 (~7 %). As the bullet slows down and gets closer to Mach 1, the correction grows.

Where the correction works hardest, in terms of Mach:

  • Above Mach 2.5 — factor = 1.0, no correction (bullet faster than the regime where it matters)
  • Mach 2.5 → 1.0 — factor falls smoothly from 1.0 to ~0.87
  • "Hot zone" — Mach 1.0–1.2 (near the sound barrier): factor drops sharply 0.905 → 0.87. For .308 this is typically 900–1100 m
  • Subsonic (Mach < 1.0) — factor stable at ~0.87

Bottom line: Multi-BC is most useful past 500 m. At shorter distances it barely matters. At 1000 m+ it gives typically 40–50 cm of drop correction for the .308 class.

Multi-BC (Dynamic BC) — как работает в этом калькуляторе

Multi-BC — это про то, как баллистический коэффициент пули меняется со скоростью. Тумблер «Динамический БК» в разделе «Поправки» включает piecewise-linear коррекцию для G1 и G7 drag-моделей. Раскрой блок ниже для подробностей.

📘 Multi-BC: что это, как работает в калькуляторе, и как использовать

Что такое баллистический коэффициент (BC)

BC — это число, описывающее насколько хорошо пуля «пробивает воздух» по сравнению с эталонной пулей. Чем больше BC, тем медленнее пуля теряет скорость и меньше падает на дистанции. Формула: BC = масса / (диаметр² × form_factor), где form factor — это отношение реального drag-профиля к эталонному.

Почему BC не постоянен

На самом деле BC чуть-чуть меняется в зависимости от скорости. Когда пуля проходит через скорость звука (~340 м/с при стандартных условиях), форма обтекания радикально меняется: на сверхзвуке формируется конус ударных волн, на дозвуке — обычное вихревое течение. У большинства match-пуль BC падает на 5-15% между начальной скоростью и моментом перехода через звуковой барьер.

Если калькулятор использует один BC на всю траекторию, он либо переоценивает дальность, либо недооценивает её на части траектории.

Три подхода в индустрии

1. Sierra Multi-BC (G1 + несколько BC). Sierra Bullets — старейший американский производитель match-пуль — публикует не одно BC, а массив значений в разных скоростных диапазонах. Пример для .308 168 grain SMK:

  • выше 792 м/с: BC = 0,462
  • 640–792 м/с: BC = 0,447
  • 549–640 м/с: BC = 0,424
  • ниже 549 м/с: BC = 0,405

Калькулятор на каждом шаге смотрит текущую скорость пули и переключает BC на соответствующий диапазон. Это даёт точные предсказания на длинных дистанциях. Минус — работает только если у тебя есть Sierra-каталог; большинство производителей публикуют только одно усреднённое значение.

2. Litz / G7 (один BC, но правильная drag-модель). Bryan Litz (Applied Ballistics) предложил другое решение: использовать drag model G7 вместо G1. G7 — это эталонная пуля более похожей на современную match-пулю формы (длинная и обтекаемая, boat-tail). Логика: BC меняется со скоростью в основном потому что эталон G1 неподходящий для современных пуль. Если эталон похож на реальную пулю — нелинейность маленькая, и одного G7 BC хватает. Сейчас G7 + single BC — золотой стандарт для длинных дистанций.

3. Hornady 4DOF / Custom Drag Model. Самый точный подход. Hornady замеряет drag-кривую каждой пули напрямую через doppler-радар на реальных стрельбах — без эталонной пули вообще. В их 4DOF приложении нет понятия «BC» — есть полный профиль Cd(M) (drag coefficient как функция числа Маха) для каждой пули. Минус — работает только для пуль которые они замерили.

Что в этом калькуляторе — piecewise-linear dynamic BC factor

Калькулятор поддерживает все 6 стандартных drag-моделей (G1, G2, G5, G6, G7, G8). Litz-подход (G7 + single BC) работает «из коробки».

Дополнительно реализован 4-й подход — piecewise-linear dynamic BC factor. Это не Sierra-style таблица из 3-4 BC значений и не Hornady CDM, а математическая функция, которая на каждом шаге интегрирования корректирует эффективный BC в зависимости от текущей скорости пули. Включается тумблером «Динамический БК» в разделе «Поправки».

Форма функции — piecewise-linear (кусочно-линейная) с разными константами для G1 и G7. Для G7 (типичный современный match-сценарий):

  • На гиперзвуке (Mach > 2.5) — factor = 1.0 (нет коррекции, выше типичных скоростей пуль)
  • На сверхзвуке (1.8–2.5) — factor линейно падает с 1.0 до 0.965 (малая коррекция ~3.5%)
  • Trans-sonic (1.2–1.8) — factor падает с 0.965 до 0.905 (~6%)
  • Около звука (1.0–1.2) — factor падает с 0.905 до 0.87 (резкая зона ~4% на узком диапазоне)
  • Дозвук (Mach < 1.0) — factor ≈ 0.87 (стабильная коррекция)

Эффект: при включённой опции эффективный BC растёт по мере замедления пули (BC_effective = BC_user / factor). Это компенсирует увеличение drag при переходе через скорость звука и даёт более точные предсказания на дальних дистанциях.

Важное ограничение: dynamic BC factor реализован только для G1 и G7. Для других drag-моделей (G2, G5, G6, G8) тумблер ничего не делает — для них нет калиброванных констант, factor возвращал бы 1.0.

Сравнение с industry-подходами

Наша реализация — гибрид: G1/G7 как base drag models (как Sierra/Litz), но применяется piecewise-linear correction к BC, а не табличное переключение между несколькими BC значениями. Легче в реализации (нет таблиц BC на каждую пулю) и работает достаточно точно для практических задач.

Если хочешь сравнить с другими подходами:

  • Sierra multi-BC table — 3-4 BC значения на пулю по velocity bands. Точнее на дальних, но требует данных от производителя
  • Litz G7 + single BC — простейший подход, достаточно точный для современных match-пуль
  • Hornady CDM (4DOF) — полная drag curve через doppler-радар. Самый точный, но только для пуль которые Hornady замерили
  • Piecewise-linear (этот калькулятор) — компромисс между точностью и простотой

Практический совет

Для современных match-пуль (.308 SMK, .338 Lapua, 6.5 Creedmoor ELD-M и т.д.) — рекомендую: выбрать G7 drag model + ввести G7 BC от производителя + включить «Динамический БК». Это даст лучшую точность на дальних дистанциях. На 1000 м для типичных снайперских комбинаций разница между «без dynamic» и «с dynamic» составляет 15-25 см drop'a — заметная для стрельбы по точечным целям.

Как именно считается баллистика при включенном Multi-BC (пошагово)

Калькулятор использует метод явного Эйлера с шагом по дистанции (~5 см при цели 1000 м). Это значит траектория считается не «за один раз», а как последовательность маленьких шажков. Для цели на 800 метров — это около 16 000 шагов, на каждом всё пересчитывается заново.

Что происходит на каждом шаге:

  1. Считается текущая скорость пули в трёх осях (vx, vy, vz)
  2. По текущей высоте — атмосферные параметры (плотность ρ, скорость звука c)
  3. Число Маха: M = v_current / c
  4. Коэффициент сопротивления Cd — квадратичная интерполяция по drag-таблице (G1 или G7) по M
  5. Если включен Multi-BC: вычисляется поправочный factor по piecewise-формуле (значения выше), и Cd делится на factor (BC становится «эффективным»)
  6. Drag-ускорение: a_drag = (ρ/ρ_std) × k_const × Cd × v_rel
  7. Гравитационное ускорение: −9,80665 м/с² по y (масштабируется на cos(slant) при стрельбе под наклоном)
  8. Кориолис (если включён): −2·(ω × v)
  9. Time-step: dt = step / vx
  10. Обновляем скорость: v_new = v − dt·(a_drag + a_grav + a_cor)
  11. Обновляем позицию: pos_new = pos + dt·v_new (semi-implicit Euler)
  12. Накапливаем TOF: TOF += dt

Конкретный пример для .308 168 grain SMK на 800 м (G7 BC=0,218, MV=817 м/с, стандартная атмосфера):

Дистанция v_текущая (м/с) Mach factor (G7) Drop без MultiBC Drop с MultiBC Разница
100 м7582,220,986−10 см−10 см~0
300 м6701,970,973−84 см−83 см+1 см
500 м5931,750,960−255 см−250 см+5 см
700 м5241,550,940−551 см−535 см+16 см
800 м4921,460,931−748 см−722 см+26 см

Заметь динамику: на 100 м factor=0,986 (коррекция ~1,4%), на 800 м уже 0,931 (коррекция ~7%). По мере замедления пули и приближения к скорости звука коррекция растёт.

Где «работает» коррекция в зависимости от Mach:

  • На сверхзвуке (M > 2,5) — factor = 1,0, коррекции нет (пуля летит выше типичной зоны)
  • От M = 2,5 до 1,0 — factor плавно падает с 1,0 до ~0,87
  • «Горячая зона» — между M=1,0 и M=1,2 (около звука): factor падает резко с 0,905 до 0,87. Для .308 это типично дистанции 900-1100 м
  • На дозвуке (M < 1,0) — factor стабилен ~0,87

Bottom line: Multi-BC реально полезен на дистанциях больше 500 м. На короткой — почти не влияет. На 1000+ м даёт типично 40-50 см drop-коррекции для .308 класса.

Multi-BC(动态弹道系数)— 本计算器的实现方式

Multi-BC 描述子弹的弹道系数如何随速度变化。「修正」区域的「动态 BC」开关启用 G1 和 G7 阻力模型的分段线性修正。展开下方区块查看完整说明。

📘 Multi-BC:是什么,计算器如何处理,如何使用

什么是弹道系数(BC)

BC 是一个数值,表示子弹相比参考弹丸「穿透空气」的能力。BC 越大,子弹失速越慢,远距离下沉越少。公式:BC = 质量 / (直径² × 形状系数),形状系数是真实阻力曲线与参考曲线的比值。

为什么 BC 不是恒定的

实际上 BC 会随速度略有变化。当子弹穿过声速(标准条件下约 340 米/秒),其外流型态发生剧烈变化:超音速时形成激波锥,亚音速时流动光滑然后出现涡流。对大多数比赛子弹而言,从初速到穿过声障的过程中,BC 下降 5%–15%

如果计算器全程使用单一 BC,那么必定在某段轨迹高估或低估射程。

行业三种方案

1. Sierra Multi-BC(G1 + 多个 BC)。美国最老牌的比赛子弹厂家 Sierra Bullets 发布的不是一个 BC,而是一组按速度区间分段的 BC 数组。例如 .308 168 格令 SMK:

  • 高于 792 米/秒:BC = 0.462
  • 640–792 米/秒:BC = 0.447
  • 549–640 米/秒:BC = 0.424
  • 低于 549 米/秒:BC = 0.405

计算器每步检查当前速度并切换到对应区间的 BC。远距离精度高。缺点:仅在你有 Sierra 数据表时可用,大多数厂家只发布一个平均 BC。

2. Litz / G7(单 BC,但用合适的阻力模型)。Bryan Litz(Applied Ballistics)提出了另一种思路:使用 G7 阻力模型取代 G1。G7 是一种形状更接近现代比赛子弹的参考弹丸(长、流线、船尾形)。逻辑:BC 随速度变化主要是因为 G1 不适合现代弹形;如果参考弹与真实子弹形状相近,非线性就小,单个 G7 BC 就够用。现在 G7 + 单 BC 是远距离的金标准。

3. Hornady 4DOF / 自定义阻力模型。最精确的方法。Hornady 直接用多普勒雷达实弹测量每种子弹的阻力曲线 — 完全不需要参考弹丸。在其 4DOF 应用中根本没有「BC」概念,只有每颗子弹的完整 Cd(M)(阻力系数随马赫数)曲线。缺点:只对 Hornady 实测过的子弹有效。

本计算器的做法 — 分段线性 dynamic BC 修正

本计算器支持全部 6 种标准参考阻力模型(G1、G2、G5、G6、G7、G8)。Litz 方法(G7 + 单 BC)开箱即用。

额外实现了第 4 种方法 — 分段线性的 dynamic BC 修正。它不是 Sierra 风格的 3–4 个 BC 值表,也不是 Hornady CDM,而是一个数学函数,在每个积分步根据当前速度调整有效 BC。通过「修正」中的「动态 BC」开关启用。

函数形状 — 分段线性,G1 和 G7 有不同的常数。以 G7(典型现代比赛场景)为例:

  • 高超音速(Mach > 2.5)— factor = 1.0(无修正,高于子弹典型速度区间)
  • 超音速(1.8–2.5)— factor 从 1.0 线性下降至 0.965(小修正 ~3.5%)
  • 跨音速(1.2–1.8)— factor 从 0.965 下降至 0.905(~6%)
  • 近音速(1.0–1.2)— factor 从 0.905 急降至 0.87(窄区间内剧烈 ~4%)
  • 亚音速(Mach < 1.0)— factor ≈ 0.87(稳定修正)

效果:开启后,有效 BC 随子弹减速而增大(BC_effective = BC_user / factor)。这补偿了穿越声障时阻力的上升,远距离预测更准。

重要限制:dynamic BC 修正对 G1 和 G7 实现。对其他阻力模型(G2、G5、G6、G8)该开关无效 — 这些模型没有校准的常数,factor 总是返回 1.0。

与行业方案的对比

本实现是一个混合方案:以 G1/G7 作为基础阻力模型(与 Sierra/Litz 一致),但在其上叠加分段线性 BC 修正,而非在多个 BC 值之间切换。实现比 Sierra 更轻(无需每颗子弹的 BC 表),实用精度足够。

对比:

  • Sierra 多 BC 表 — 每颗子弹 3–4 个 BC,按速度区间。远距离精度高,但需要厂家数据
  • Litz G7 + 单 BC — 对现代比赛子弹最简单的精确方案
  • Hornady CDM(4DOF) — 多普勒雷达全曲线。最精确,但仅限实测过的子弹
  • 分段线性(本计算器) — 精度与简洁度的折中

实用建议

对于现代比赛子弹(.308 SMK、.338 Lapua、6.5 Creedmoor ELD-M 等)— 推荐:选择 G7 阻力模型 + 输入厂家 G7 BC + 启用「动态 BC」。这在远距离上精度最佳。在 1000 米对典型狙击组合,「开启」与「关闭」之间下沉差异约 15–25 cm — 对点目标射击是显著差距。

开启 Multi-BC 后的逐步计算(内部细节)

计算器使用显式欧拉法,按距离的固定步长(1000 米目标时约 5 cm)。轨迹分解为大量小步,每步重新计算所有量。800 米目标约 16 000 步

每一步发生什么:

  1. 读取当前子弹速度分量(vx, vy, vz)
  2. 根据当前高度算大气参数(密度 ρ,声速 c)
  3. 马赫数:M = v_current / c
  4. 阻力系数 Cd — 在阻力表(G1 或 G7)按 M 做二次插值
  5. 若 Multi-BC 开启:按上述分段公式计算 factor,并将 Cd 除以 factor(等效提升 BC)
  6. 阻力加速度:a_drag = (ρ/ρ_std) × k_const × Cd × v_rel
  7. 重力:−9.80665 m/s²沿 y 方向(如倾斜射击则乘以 cos(slant))
  8. 科里奥利(如启用):−2·(ω × v)
  9. 时间步:dt = step / vx
  10. 更新速度:v_new = v − dt·(a_drag + a_grav + a_cor)
  11. 更新位置:pos_new = pos + dt·v_new(半隐式欧拉)
  12. 累加 TOF:TOF += dt

具体示例 — .308 168 格令 SMK 在 800 米(G7 BC = 0.218,初速 817 米/秒,标准大气):

距离 v_当前(米/秒) Mach factor(G7) 无 Multi-BC 下沉 有 Multi-BC 下沉
100 m7582.220.986−10 cm−10 cm~0
300 m6701.970.973−84 cm−83 cm+1 cm
500 m5931.750.960−255 cm−250 cm+5 cm
700 m5241.550.940−551 cm−535 cm+16 cm
800 m4921.460.931−748 cm−722 cm+26 cm

注意趋势:100 m 处 factor=0.986(修正 ~1.4%),800 m 处已是 0.931(修正 ~7%)。子弹越慢越接近声速,修正越大。

修正按 Mach 数生效的区间:

  • 超音速(M > 2.5)— factor = 1.0,无修正(子弹快于典型区间)
  • M = 2.5 至 1.0 — factor 平滑下降,从 1.0 至 ~0.87
  • 「热区」— Mach 1.0–1.2(近声速):factor 急降 0.905 → 0.87。对 .308 通常是 900–1100 米
  • 亚音速(M < 1.0)— factor 稳定在 ~0.87

结论:Multi-BC 在 500 米以上有用。短距离几乎无影响。在 1000 米+ 对 .308 级别通常带来 40–50 cm 的下沉修正。

Constants & data sources

Every number the engine multiplies by has a citation. This block lists each constant and the drag-profile data source so the calculation is fully auditable.

📐 Physical constants (with sources)
SymbolValueMeaningSource
g9.80665 m/s²Standard gravitational acceleration at Earth's surface — defined value (not measured locally; the bullet trajectory is scaled by cos(slant) in the line-of-sight frame for inclined shots).ISO 80000-3, CGPM 1901
Ω7.292115 × 10⁻⁵ rad/sEarth's sidereal angular rotation rate. Drives the Coriolis perturbation −2(Ω × v).IUGG / IERS Conventions 2010
K_McCoy0.000559Leading coefficient in a_drag = K · ρ · Cd · v² / BC (SI units, BC in lb/in²).McCoy, Modern Exterior Ballistics, 1999, p. 169
Litz_exp1.83Power exponent in spin-drift formula drift_in = (SG + 1.2) · 1.25 · t^1.83.Litz, Applied Ballistics for Long-Range Shooting, 2009
inch0.0254 mExact definition: 1 international inch = 25.4 mm.International Yard and Pound Agreement, 1959
c₀331.0 m/sSpeed of sound in dry air at 0 °C — base value used in c = c₀·√(T/T₀).Standard acoustics; matches reference calculator
T₀273.15 KCelsius–Kelvin offset (water triple-point, the exact Kelvin definition).SI, 13th CGPM 1967
L−0.0065 K/mTropospheric temperature lapse rate (standard atmosphere).ICAO ISA 1964 / U.S. Standard Atmosphere 1976
R8.31432 J/(mol·K)Universal gas constant (1976 ISA convention; differs from modern CODATA 8.31446 at the 4th significant digit — kept for ICAO compatibility).U.S. Standard Atmosphere 1976
M_air0.0289644 kg/molMean molar mass of dry air.U.S. Standard Atmosphere 1976
R_dry287.058 J/(kg·K)Specific gas constant of dry air. Used in ρ = P / (R_dry · T).Derived from R and M_air
R_vap461.495 J/(kg·K)Specific gas constant of water vapor. Used in humidity correction to density.Derived from R and M_water
ρ_std1.225 kg/m³ICAO sea-level standard air density (15 °C, 1013.25 hPa, dry).ICAO ISA 1964
MAX_DROP3048 mIntegration safety stop — bullet too far below sight line.Engine internal (10,000 ft)
MIN_VEL15.24 m/sIntegration safety stop — bullet too slow to track meaningfully (≈ 50 fps).Engine internal

Source code: src/physics/Constants.ts (engine constants), src/physics/atmosphere/IcaoAltitudeProfile.ts (ICAO ISA), src/physics/stability/MillerStabilityModel.ts (Miller-formula unit conversions: 15.4324 gr/g, 25.4 mm/in, 3386.388666 Pa/inHg).

📊 Drag profiles — source & verification

All six reference drag tables (G1, G2, G5, G6, G7, G8) are taken from JBM Ballistics — the industry-standard tabulation also reproduced in McCoy 1999. Verified on 2026-05-25 against https://www.jbmballistics.com/ballistics/downloads/text/mcg*.txt with tolerance |Δ Cd| < 5×10⁻⁵.

ProfilePointsMach rangeMismatchesNotes
G1780.0–5.00Mayevski 1881 flat-base (legacy)
G2760.0–3.60Aberdeen "J" projectile
G5760.0–5.00Short 7.5° boat-tail
G6790.0–5.00Flat-base spitzer
G7780.0–3.90Modern boat-tail match — default
G8780.0–5.00Flat-base, blunt-nose

Interpolation between table points: piecewise quadratic with per-node (a, b, c) coefficients — see src/physics/drag/TableDragModel.ts. Linear interpolation would underestimate Cd in the transonic shoulder by 1–3 %, enough to throw long-range drop off by tens of cm.

Source code per profile: src/data/drag-tables/g{1,2,5,6,7,8}.ts (raw tables), src/physics/drag/G{1,2,5,6,7,8}DragModel.ts (concrete strategies), src/physics/drag/DragModelRegistry.ts (resolver).

Константы и источники данных

Каждое число, на которое engine умножает — с указанием источника. Этот блок перечисляет все константы и источник drag-таблиц, чтобы расчёт был полностью аудитируем.

📐 Физические константы (с источниками)
СимволЗначениеСмыслИсточник
g9,80665 м/с²Стандартное ускорение свободного падения на поверхности Земли — определяющее значение (не измеряется локально; при наклонной стрельбе пуля масштабируется на cos(slant) в системе линии прицеливания).ISO 80000-3, CGPM 1901
Ω7,292115 × 10⁻⁵ рад/сУгловая скорость вращения Земли (сидерический день). Используется в Кориолисе −2(Ω × v).IUGG / IERS Conventions 2010
K_McCoy0,000559Главный коэффициент в формуле drag a_drag = K · ρ · Cd · v² / BC (СИ единицы, BC в lb/in²).McCoy, Modern Exterior Ballistics, 1999, стр. 169
Litz_exp1,83Степенной показатель в формуле деривации drift_in = (SG + 1,2) · 1,25 · t^1,83.Litz, Applied Ballistics for Long-Range Shooting, 2009
дюйм0,0254 мТочное определение: 1 международный дюйм = 25,4 мм.International Yard and Pound Agreement, 1959
c₀331,0 м/сСкорость звука в сухом воздухе при 0 °C — базовое значение в c = c₀·√(T/T₀).Стандартная акустика; совпадает с reference калькулятором
T₀273,15 KСдвиг Цельсий–Кельвин (тройная точка воды, точное определение Кельвина).СИ, 13-я CGPM 1967
L−0,0065 K/мТемпературный градиент тропосферы (стандартная атмосфера).ICAO ISA 1964 / U.S. Standard Atmosphere 1976
R8,31432 Дж/(моль·K)Универсальная газовая постоянная (соглашение ISA 1976; отличается от современной CODATA 8,31446 в 4-й значащей цифре — оставлено для совместимости с ICAO).U.S. Standard Atmosphere 1976
M_air0,0289644 кг/мольСредняя молярная масса сухого воздуха.U.S. Standard Atmosphere 1976
R_dry287,058 Дж/(кг·K)Удельная газовая постоянная сухого воздуха. Используется в ρ = P / (R_dry · T).Выведена из R и M_air
R_vap461,495 Дж/(кг·K)Удельная газовая постоянная водяного пара. Используется в поправке плотности на влажность.Выведена из R и M_water
ρ_std1,225 кг/м³Стандартная плотность воздуха ICAO на уровне моря (15 °C, 1013,25 гПа, сухой).ICAO ISA 1964
MAX_DROP3048 мSafety stop integration — пуля слишком далеко ниже линии прицеливания.Engine internal (10 000 ft)
MIN_VEL15,24 м/сSafety stop — пуля слишком медленная для tracking (≈ 50 fps).Engine internal

Коэффициенты перевода единиц

КоэффициентЗначениеГде используется
гран в грамме15,4323583529Перевод массы пули (Miller SG требует граны)
мм в дюйме25,4 (точно)Диаметр и длина пули
см в дюйме2,54 (точно)Шаг нарезов
м в футе0,3048 (точно)Начальная скорость → ft/s для Miller
Па на inHg3386,388666Давление для атмо-фактора Miller
Miller v_ref2800 ft/sReference скорость в v_factor = ∛(MV/2800) для Miller SG

Угловые единицы (mil / mrad / тысячная) — внимание

В природе существует ТРИ разных «mil» — одно имя, разные значения. Engine использует true mrad, и именно это значение размечено на сетках всех современных прицелов.

НазваниеВ окружности1 единица в радианахГде используется
True mrad / прицельный «mil»≈ 6283,190,001000Сетки Mil-Dot, Horus, MIL-C — и этот engine
NATO mil6400 (точно)0,000982 (~1,9 % отличие)Военный компас / артиллерия; не для прицельных поправок
Русская «тысячная»6000 (точно)0,001047 (~4,7 % отличие)Советская / варшавского блока артиллерия; иногда в Strelok-Pro UI тоже подписана «mil»

В engine: drop / distance — это угол в радианах. Умножив на 1000, получаем mrad — тот самый «mil», который размечен на сетках прицелов. 1 mrad поправки = 10 см на 100 м = 1 м на 1000 м.

Перевод в MOA (угловые минуты): 1 mrad = 3,4377 MOA. 1 MOA ≈ 2,908 см на 100 м.

Источник в коде: src/physics/Constants.ts (константы + угловые конвенции), src/physics/atmosphere/IcaoAltitudeProfile.ts (ICAO ISA), src/physics/stability/MillerStabilityModel.ts (конверсии единиц).

📊 Drag-профили — источник и сверка

Все 6 эталонных drag-таблиц (G1, G2, G5, G6, G7, G8) взяты с JBM Ballistics — индустриальный стандарт, также воспроизведённый в McCoy 1999. Сверены 2026-05-25 против https://www.jbmballistics.com/ballistics/downloads/text/mcg*.txt с tolerance |Δ Cd| < 5×10⁻⁵.

ПрофильТочекMach диапазонРасхожденийЗаметки
G1780,0–5,00Маевский 1881, плоскодонная пуля (legacy)
G2760,0–3,60Aberdeen "J" projectile
G5760,0–5,00Короткий 7,5° boat-tail
G6790,0–5,00Плоскодонный spitzer
G7780,0–3,90Современная boat-tail match — по умолчанию
G8780,0–5,00Плоскодонная, тупоносая

Интерполяция между точками: кусочно-квадратичная с коэффициентами (a, b, c) на узел — см. src/physics/drag/TableDragModel.ts. Линейная интерполяция занижала бы Cd в трансзвуковой области на 1–3 %, что давало бы расхождение в десятки см на дальних дистанциях.

Исходный код профилей: src/data/drag-tables/g{1,2,5,6,7,8}.ts (raw таблицы), src/physics/drag/G{1,2,5,6,7,8}DragModel.ts (конкретные стратегии), src/physics/drag/DragModelRegistry.ts (резолвер).

常数与数据来源

引擎所用的每个数字都标注了来源。本区块列出全部常数与阻力曲线数据源,使整个计算完全可审计。

📐 物理常数(含来源)
符号数值含义来源
g9.80665 m/s²地球表面标准重力加速度 — 定义值(非本地测量;倾斜射击时在瞄准线坐标系内按 cos(slant) 缩放)。ISO 80000-3, CGPM 1901
Ω7.292115 × 10⁻⁵ rad/s地球恒星日角速度。用于科里奥利项 −2(Ω × v)IUGG / IERS Conventions 2010
K_McCoy0.000559阻力公式中的首项系数:a_drag = K · ρ · Cd · v² / BC(SI 单位,BC 以 lb/in²)。McCoy, Modern Exterior Ballistics, 1999, p. 169
Litz_exp1.83自旋偏移公式的幂指数:drift_in = (SG + 1.2) · 1.25 · t^1.83Litz, Applied Ballistics for Long-Range Shooting, 2009
英寸0.0254 m精确定义:1 国际英寸 = 25.4 毫米。International Yard and Pound Agreement, 1959
c₀331.0 m/s0 °C 干燥空气中的声速 — c = c₀·√(T/T₀) 的基准值。标准声学;与参考计算器一致
T₀273.15 K摄氏–开氏偏移(水三相点,开尔文的精确定义)。SI,第 13 届 CGPM 1967
L−0.0065 K/m对流层温度递减率(标准大气)。ICAO ISA 1964 / U.S. Standard Atmosphere 1976
R8.31432 J/(mol·K)通用气体常数(1976 ISA 约定;与现代 CODATA 值 8.31446 在第 4 位有效数字处不同 — 保留以兼容 ICAO)。U.S. Standard Atmosphere 1976
M_air0.0289644 kg/mol干燥空气平均摩尔质量。U.S. Standard Atmosphere 1976
R_dry287.058 J/(kg·K)干燥空气比气体常数。用于 ρ = P / (R_dry · T)由 R 与 M_air 推得
R_vap461.495 J/(kg·K)水蒸气比气体常数。用于湿度对密度的修正。由 R 与 M_water 推得
ρ_std1.225 kg/m³ICAO 海平面标准空气密度(15 °C,1013.25 hPa,干燥)。ICAO ISA 1964
MAX_DROP3048 m积分安全终止 — 子弹相对瞄准线下沉过多。引擎内部(10,000 ft)
MIN_VEL15.24 m/s积分安全终止 — 子弹太慢以致跟踪无意义(≈ 50 fps)。引擎内部

单位换算系数

系数数值用途
格令/克15.4323583529子弹质量换算(Miller SG 需要格令)
毫米/英寸25.4(精确)子弹直径与长度
厘米/英寸2.54(精确)缠距
米/英尺0.3048(精确)初速 → ft/s 用于 Miller
Pa/inHg3386.388666Miller 大气因子的气压换算
Miller v_ref2800 ft/sMiller SG 中 v_factor = ∛(MV/2800) 的参考速度

角度单位(mil / mrad / тысячная)— 注意

世界上存在三种不同的「mil」,名称相同但数值不同。本引擎使用 true mrad,这也是所有现代瞄准镜标线上写「mil」的意思。

名称每整圈1 单位 (rad)使用场景
True mrad / 瞄准镜「mil」≈ 6283.190.001000Mil-Dot、Horus、MIL-C 标线 — 本引擎使用
NATO mil6400(精确)0.000982(~1.9% 偏差)军用罗盘 / 炮兵;不能用于瞄准镜修正
俄语「тысячная」6000(精确)0.001047(~4.7% 偏差)苏联 / 华沙公约炮兵;部分俄式瞄准镜和 Strelok-Pro UI 也用此名

引擎中:drop / distance = 角度(弧度)。乘以 1000 得 mrad,即瞄准镜标线上的「mil」。1 mrad 修正 = 100 m 处 10 cm = 1000 m 处 1 m — 便于记忆。

换算到 MOA(角分):1 mrad = 3.4377 MOA。1 MOA ≈ 100 m 处 2.908 cm。

代码位置:src/physics/Constants.ts(常数与角度规范),src/physics/atmosphere/IcaoAltitudeProfile.ts(ICAO ISA),src/physics/stability/MillerStabilityModel.ts(单位换算)。

📊 阻力曲线 — 来源与核验

全部六个参考阻力曲线(G1、G2、G5、G6、G7、G8)取自 JBM Ballistics — 行业标准表,亦见于 McCoy 1999。2026-05-25 与 https://www.jbmballistics.com/ballistics/downloads/text/mcg*.txt 核验,容差 |Δ Cd| < 5×10⁻⁵。

曲线点数Mach 范围不匹配备注
G1780.0–5.00Mayevski 1881 平底(传统)
G2760.0–3.60Aberdeen "J" 弹丸
G5760.0–5.00短 7.5° 船尾
G6790.0–5.00平底尖头
G7780.0–3.90现代船尾比赛 — 默认
G8780.0–5.00平底钝头

表点间插值:分段二次插值,每节点一组 (a, b, c) 系数 — 见 src/physics/drag/TableDragModel.ts。线性插值会在跨音速肩部低估 Cd 1–3%,足以在远距离造成数十厘米的下沉偏差。

各曲线源代码:src/data/drag-tables/g{1,2,5,6,7,8}.ts(原始表),src/physics/drag/G{1,2,5,6,7,8}DragModel.ts(具体策略),src/physics/drag/DragModelRegistry.ts(注册表)。