Results
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:
- Read current bullet velocity components (vx, vy, vz)
- Atmosphere at current altitude (density ρ, speed of sound c)
- Mach number:
M = v_current / c - Drag coefficient Cd — quadratic interpolation in the drag table (G1, G7, …) at M
- If Multi-BC is on: compute the
factorfrom the piecewise formula above and divide Cd by it (effectively raising BC) - Drag acceleration:
a_drag = (ρ/ρ_std) · k_const · Cd · v_rel - Gravity:
−9.80665 m/s²along y (scaled by cos(slant) if shooting up/downhill) - Coriolis (if enabled):
−2 · (ω × v) - Time step:
dt = step / vx - Update velocity:
v_new = v − dt · (a_drag + a_grav + a_cor) - Update position:
pos_new = pos + dt · v_new(semi-implicit Euler) - 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 m | 758 | 2.22 | 0.986 | −10 cm | −10 cm | ~0 |
| 300 m | 670 | 1.97 | 0.973 | −84 cm | −83 cm | +1 cm |
| 500 m | 593 | 1.75 | 0.960 | −255 cm | −250 cm | +5 cm |
| 700 m | 524 | 1.55 | 0.940 | −551 cm | −535 cm | +16 cm |
| 800 m | 492 | 1.46 | 0.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 шагов, на каждом всё пересчитывается заново.
Что происходит на каждом шаге:
- Считается текущая скорость пули в трёх осях (vx, vy, vz)
- По текущей высоте — атмосферные параметры (плотность ρ, скорость звука c)
- Число Маха:
M = v_current / c - Коэффициент сопротивления Cd — квадратичная интерполяция по drag-таблице (G1 или G7) по M
- Если включен Multi-BC: вычисляется поправочный
factorпо piecewise-формуле (значения выше), и Cd делится на factor (BC становится «эффективным») - Drag-ускорение:
a_drag = (ρ/ρ_std) × k_const × Cd × v_rel - Гравитационное ускорение:
−9,80665 м/с²по y (масштабируется на cos(slant) при стрельбе под наклоном) - Кориолис (если включён):
−2·(ω × v) - Time-step:
dt = step / vx - Обновляем скорость:
v_new = v − dt·(a_drag + a_grav + a_cor) - Обновляем позицию:
pos_new = pos + dt·v_new(semi-implicit Euler) - Накапливаем TOF:
TOF += dt
Конкретный пример для .308 168 grain SMK на 800 м (G7 BC=0,218, MV=817 м/с, стандартная атмосфера):
| Дистанция | v_текущая (м/с) | Mach | factor (G7) | Drop без MultiBC | Drop с MultiBC | Разница |
|---|---|---|---|---|---|---|
| 100 м | 758 | 2,22 | 0,986 | −10 см | −10 см | ~0 |
| 300 м | 670 | 1,97 | 0,973 | −84 см | −83 см | +1 см |
| 500 м | 593 | 1,75 | 0,960 | −255 см | −250 см | +5 см |
| 700 м | 524 | 1,55 | 0,940 | −551 см | −535 см | +16 см |
| 800 м | 492 | 1,46 | 0,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 步。
每一步发生什么:
- 读取当前子弹速度分量(vx, vy, vz)
- 根据当前高度算大气参数(密度 ρ,声速 c)
- 马赫数:
M = v_current / c - 阻力系数 Cd — 在阻力表(G1 或 G7)按 M 做二次插值
- 若 Multi-BC 开启:按上述分段公式计算
factor,并将 Cd 除以 factor(等效提升 BC) - 阻力加速度:
a_drag = (ρ/ρ_std) × k_const × Cd × v_rel - 重力:
−9.80665 m/s²沿 y 方向(如倾斜射击则乘以 cos(slant)) - 科里奥利(如启用):
−2·(ω × v) - 时间步:
dt = step / vx - 更新速度:
v_new = v − dt·(a_drag + a_grav + a_cor) - 更新位置:
pos_new = pos + dt·v_new(半隐式欧拉) - 累加 TOF:
TOF += dt
具体示例 — .308 168 格令 SMK 在 800 米(G7 BC = 0.218,初速 817 米/秒,标准大气):
| 距离 | v_当前(米/秒) | Mach | factor(G7) | 无 Multi-BC 下沉 | 有 Multi-BC 下沉 | 差 |
|---|---|---|---|---|---|---|
| 100 m | 758 | 2.22 | 0.986 | −10 cm | −10 cm | ~0 |
| 300 m | 670 | 1.97 | 0.973 | −84 cm | −83 cm | +1 cm |
| 500 m | 593 | 1.75 | 0.960 | −255 cm | −250 cm | +5 cm |
| 700 m | 524 | 1.55 | 0.940 | −551 cm | −535 cm | +16 cm |
| 800 m | 492 | 1.46 | 0.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)
| Symbol | Value | Meaning | Source |
|---|---|---|---|
g | 9.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/s | Earth's sidereal angular rotation rate. Drives the Coriolis perturbation −2(Ω × v). | IUGG / IERS Conventions 2010 |
K_McCoy | 0.000559 | Leading coefficient in a_drag = K · ρ · Cd · v² / BC (SI units, BC in lb/in²). | McCoy, Modern Exterior Ballistics, 1999, p. 169 |
Litz_exp | 1.83 | Power exponent in spin-drift formula drift_in = (SG + 1.2) · 1.25 · t^1.83. | Litz, Applied Ballistics for Long-Range Shooting, 2009 |
inch | 0.0254 m | Exact definition: 1 international inch = 25.4 mm. | International Yard and Pound Agreement, 1959 |
c₀ | 331.0 m/s | Speed of sound in dry air at 0 °C — base value used in c = c₀·√(T/T₀). | Standard acoustics; matches reference calculator |
T₀ | 273.15 K | Celsius–Kelvin offset (water triple-point, the exact Kelvin definition). | SI, 13th CGPM 1967 |
L | −0.0065 K/m | Tropospheric temperature lapse rate (standard atmosphere). | ICAO ISA 1964 / U.S. Standard Atmosphere 1976 |
R | 8.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_air | 0.0289644 kg/mol | Mean molar mass of dry air. | U.S. Standard Atmosphere 1976 |
R_dry | 287.058 J/(kg·K) | Specific gas constant of dry air. Used in ρ = P / (R_dry · T). | Derived from R and M_air |
R_vap | 461.495 J/(kg·K) | Specific gas constant of water vapor. Used in humidity correction to density. | Derived from R and M_water |
ρ_std | 1.225 kg/m³ | ICAO sea-level standard air density (15 °C, 1013.25 hPa, dry). | ICAO ISA 1964 |
MAX_DROP | 3048 m | Integration safety stop — bullet too far below sight line. | Engine internal (10,000 ft) |
MIN_VEL | 15.24 m/s | Integration 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⁻⁵.
| Profile | Points | Mach range | Mismatches | Notes |
|---|---|---|---|---|
| G1 | 78 | 0.0–5.0 | 0 | Mayevski 1881 flat-base (legacy) |
| G2 | 76 | 0.0–3.6 | 0 | Aberdeen "J" projectile |
| G5 | 76 | 0.0–5.0 | 0 | Short 7.5° boat-tail |
| G6 | 79 | 0.0–5.0 | 0 | Flat-base spitzer |
| G7 | 78 | 0.0–3.9 | 0 | Modern boat-tail match — default |
| G8 | 78 | 0.0–5.0 | 0 | Flat-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-таблиц, чтобы расчёт был полностью аудитируем.
📐 Физические константы (с источниками)
| Символ | Значение | Смысл | Источник |
|---|---|---|---|
g | 9,80665 м/с² | Стандартное ускорение свободного падения на поверхности Земли — определяющее значение (не измеряется локально; при наклонной стрельбе пуля масштабируется на cos(slant) в системе линии прицеливания). | ISO 80000-3, CGPM 1901 |
Ω | 7,292115 × 10⁻⁵ рад/с | Угловая скорость вращения Земли (сидерический день). Используется в Кориолисе −2(Ω × v). | IUGG / IERS Conventions 2010 |
K_McCoy | 0,000559 | Главный коэффициент в формуле drag a_drag = K · ρ · Cd · v² / BC (СИ единицы, BC в lb/in²). | McCoy, Modern Exterior Ballistics, 1999, стр. 169 |
Litz_exp | 1,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 |
R | 8,31432 Дж/(моль·K) | Универсальная газовая постоянная (соглашение ISA 1976; отличается от современной CODATA 8,31446 в 4-й значащей цифре — оставлено для совместимости с ICAO). | U.S. Standard Atmosphere 1976 |
M_air | 0,0289644 кг/моль | Средняя молярная масса сухого воздуха. | U.S. Standard Atmosphere 1976 |
R_dry | 287,058 Дж/(кг·K) | Удельная газовая постоянная сухого воздуха. Используется в ρ = P / (R_dry · T). | Выведена из R и M_air |
R_vap | 461,495 Дж/(кг·K) | Удельная газовая постоянная водяного пара. Используется в поправке плотности на влажность. | Выведена из R и M_water |
ρ_std | 1,225 кг/м³ | Стандартная плотность воздуха ICAO на уровне моря (15 °C, 1013,25 гПа, сухой). | ICAO ISA 1964 |
MAX_DROP | 3048 м | Safety stop integration — пуля слишком далеко ниже линии прицеливания. | Engine internal (10 000 ft) |
MIN_VEL | 15,24 м/с | Safety stop — пуля слишком медленная для tracking (≈ 50 fps). | Engine internal |
Коэффициенты перевода единиц
| Коэффициент | Значение | Где используется |
|---|---|---|
| гран в грамме | 15,4323583529 | Перевод массы пули (Miller SG требует граны) |
| мм в дюйме | 25,4 (точно) | Диаметр и длина пули |
| см в дюйме | 2,54 (точно) | Шаг нарезов |
| м в футе | 0,3048 (точно) | Начальная скорость → ft/s для Miller |
| Па на inHg | 3386,388666 | Давление для атмо-фактора Miller |
| Miller v_ref | 2800 ft/s | Reference скорость в v_factor = ∛(MV/2800) для Miller SG |
Угловые единицы (mil / mrad / тысячная) — внимание
⚠ В природе существует ТРИ разных «mil» — одно имя, разные значения. Engine использует true mrad, и именно это значение размечено на сетках всех современных прицелов.
| Название | В окружности | 1 единица в радианах | Где используется |
|---|---|---|---|
| True mrad / прицельный «mil» | ≈ 6283,19 | 0,001000 | Сетки Mil-Dot, Horus, MIL-C — и этот engine |
| NATO mil | 6400 (точно) | 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 диапазон | Расхождений | Заметки |
|---|---|---|---|---|
| G1 | 78 | 0,0–5,0 | 0 | Маевский 1881, плоскодонная пуля (legacy) |
| G2 | 76 | 0,0–3,6 | 0 | Aberdeen "J" projectile |
| G5 | 76 | 0,0–5,0 | 0 | Короткий 7,5° boat-tail |
| G6 | 79 | 0,0–5,0 | 0 | Плоскодонный spitzer |
| G7 | 78 | 0,0–3,9 | 0 | Современная boat-tail match — по умолчанию |
| G8 | 78 | 0,0–5,0 | 0 | Плоскодонная, тупоносая |
Интерполяция между точками: кусочно-квадратичная с коэффициентами (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 (резолвер).
常数与数据来源
引擎所用的每个数字都标注了来源。本区块列出全部常数与阻力曲线数据源,使整个计算完全可审计。
📐 物理常数(含来源)
| 符号 | 数值 | 含义 | 来源 |
|---|---|---|---|
g | 9.80665 m/s² | 地球表面标准重力加速度 — 定义值(非本地测量;倾斜射击时在瞄准线坐标系内按 cos(slant) 缩放)。 | ISO 80000-3, CGPM 1901 |
Ω | 7.292115 × 10⁻⁵ rad/s | 地球恒星日角速度。用于科里奥利项 −2(Ω × v)。 | IUGG / IERS Conventions 2010 |
K_McCoy | 0.000559 | 阻力公式中的首项系数:a_drag = K · ρ · Cd · v² / BC(SI 单位,BC 以 lb/in²)。 | McCoy, Modern Exterior Ballistics, 1999, p. 169 |
Litz_exp | 1.83 | 自旋偏移公式的幂指数:drift_in = (SG + 1.2) · 1.25 · t^1.83。 | Litz, Applied Ballistics for Long-Range Shooting, 2009 |
英寸 | 0.0254 m | 精确定义:1 国际英寸 = 25.4 毫米。 | International Yard and Pound Agreement, 1959 |
c₀ | 331.0 m/s | 0 °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 |
R | 8.31432 J/(mol·K) | 通用气体常数(1976 ISA 约定;与现代 CODATA 值 8.31446 在第 4 位有效数字处不同 — 保留以兼容 ICAO)。 | U.S. Standard Atmosphere 1976 |
M_air | 0.0289644 kg/mol | 干燥空气平均摩尔质量。 | U.S. Standard Atmosphere 1976 |
R_dry | 287.058 J/(kg·K) | 干燥空气比气体常数。用于 ρ = P / (R_dry · T)。 | 由 R 与 M_air 推得 |
R_vap | 461.495 J/(kg·K) | 水蒸气比气体常数。用于湿度对密度的修正。 | 由 R 与 M_water 推得 |
ρ_std | 1.225 kg/m³ | ICAO 海平面标准空气密度(15 °C,1013.25 hPa,干燥)。 | ICAO ISA 1964 |
MAX_DROP | 3048 m | 积分安全终止 — 子弹相对瞄准线下沉过多。 | 引擎内部(10,000 ft) |
MIN_VEL | 15.24 m/s | 积分安全终止 — 子弹太慢以致跟踪无意义(≈ 50 fps)。 | 引擎内部 |
单位换算系数
| 系数 | 数值 | 用途 |
|---|---|---|
| 格令/克 | 15.4323583529 | 子弹质量换算(Miller SG 需要格令) |
| 毫米/英寸 | 25.4(精确) | 子弹直径与长度 |
| 厘米/英寸 | 2.54(精确) | 缠距 |
| 米/英尺 | 0.3048(精确) | 初速 → ft/s 用于 Miller |
| Pa/inHg | 3386.388666 | Miller 大气因子的气压换算 |
| Miller v_ref | 2800 ft/s | Miller SG 中 v_factor = ∛(MV/2800) 的参考速度 |
角度单位(mil / mrad / тысячная)— 注意
⚠ 世界上存在三种不同的「mil」,名称相同但数值不同。本引擎使用 true mrad,这也是所有现代瞄准镜标线上写「mil」的意思。
| 名称 | 每整圈 | 1 单位 (rad) | 使用场景 |
|---|---|---|---|
| True mrad / 瞄准镜「mil」 | ≈ 6283.19 | 0.001000 | Mil-Dot、Horus、MIL-C 标线 — 本引擎使用 |
| NATO mil | 6400(精确) | 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 范围 | 不匹配 | 备注 |
|---|---|---|---|---|
| G1 | 78 | 0.0–5.0 | 0 | Mayevski 1881 平底(传统) |
| G2 | 76 | 0.0–3.6 | 0 | Aberdeen "J" 弹丸 |
| G5 | 76 | 0.0–5.0 | 0 | 短 7.5° 船尾 |
| G6 | 79 | 0.0–5.0 | 0 | 平底尖头 |
| G7 | 78 | 0.0–3.9 | 0 | 现代船尾比赛 — 默认 |
| G8 | 78 | 0.0–5.0 | 0 | 平底钝头 |
表点间插值:分段二次插值,每节点一组 (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(注册表)。