5.2.2 破片与冲击波毁伤
这是常规战斗部最核心的两个毁伤函数,二者均为归一化距离的幂律衰减,但指数与介质修正不同。
算法:破片毁伤 FragDamageAtThisDistance
Damage(d) = DP · ( (R_cut − d) / R_cut )² d < R_cut
R_cut = GetCutoffRange_Frag_nm(DP, medium):
空中(Air) R_cut = 10 · DP^(1/3) m → 转 nm 除以 1852
外空(Space) R_cut = 10 · DP m (真空中破片无空气阻力,线性扩展)
其他介质 R_cut = 0 (水下/地下无破片效应)
伪代码实现(C++):
cpp
// 破片毁伤算法:FragDamageAtThisDistance
// 输入:DP(战斗部当量,kg TNT)、d(目标距离,nm)、medium(介质类型)
// 输出:归一化毁伤量(0~1 区间,ABM 场景 ×2)
double FragDamageAtThisDistance(double DP, double d, Medium medium) {
// 1. 计算破片有效截止距离 R_cut(单位:nm)
double R_cut = 0.0;
switch (medium) {
case AIR: // 空中:R_cut = 10 · DP^(1/3) [m],转 nm 除以 1852
R_cut = 10.0 * std::pow(DP, 1.0 / 3.0) / 1852.0;
break;
case SPACE: // 外空:真空中无空气阻力,破片线性扩展
R_cut = 10.0 * DP / 1852.0;
break;
default: // 水下/地下等:无破片效应
R_cut = 0.0;
break;
}
// 2. 距离超过截止距离,毁伤为 0
if (d >= R_cut || R_cut <= 0.0) return 0.0;
// 3. 幂律衰减:Damage = DP · ( (R_cut − d) / R_cut )²
double damage = DP * std::pow((R_cut - d) / R_cut, 2.0);
**计算示例(空中,DP = 100 kg TNT,d = 0.5 nm)**:
逐步推导:
1. 计算破片有效截止距离 `R_cut`(空中):
`R_cut = 10 · DP^(1/3) / 1852 = 10 · 100^(1/3) / 1852 = 10 · 4.6416 / 1852 ≈ 0.02506 nm`
2. 判断距离是否在截止距离内:
`d = 0.5 nm > R_cut ≈ 0.02506 nm`,目标已超出破片有效毁伤范围。
3. 代入幂律衰减公式:
`Damage = DP · ( (R_cut − d) / R_cut )² = 100 · ( (0.02506 − 0.5) / 0.02506 )²`
4. 由于 `(R_cut − d) < 0`,按算法第 2 步判定 `d ≥ R_cut`,直接返回 0。
**最终结果**:`FragDamageAtThisDistance(100, 0.5, AIR) = 0`。
**结论**:100 kg TNT 战斗部在空中的破片有效截止距离仅约 0.025 nm(约 46 m),0.5 nm 处的目标已远超破片杀伤半径,破片毁伤量为 0。这也说明破片毁伤是典型的近距杀伤机制,远距离毁伤主要依赖冲击波。
// 4. ABM(反弹道导弹拦截)场景毁伤翻倍
if (isABMScenario) damage *= 2.0;
return damage;
}
cpp
// 冲击波毁伤算法:BlastDamageAtThisDistance
// 输入:DP(战斗部当量,kg TNT)、d(目标距离,nm)、medium(介质类型)
// 输出:归一化毁伤量(0~1 区间)
double BlastDamageAtThisDistance(double DP, double d, Medium medium) {
// 1. 基准截止距离 R_base = exp(0.3315 · ln(DP) + 2.9034) [m]
// 等价于 R_base = 18.23 · DP^0.3315(爆炸相似律,接近立方根定律)
double R_base = std::exp(0.3315 * std::log(DP) + 2.9034);
// 2. 按介质修正 R_cut(单位:nm)
double R_cut = 0.0;
switch (medium) {
case AIR: // 空中 / 水面:R_cut = R_base
case SURFACE:
R_cut = R_base / 1852.0;
break;
case UNDERWATER: // 水下:R_cut = R_base × 4.411497730711
R_cut = R_base * 4.411497730711 / 1852.0;
break;
case UNDERGROUND: // 地下:R_cut = R_base × 8.822995461422(水下的 2 倍)
R_cut = R_base * 8.822995461422 / 1852.0;
break;
case SPACE: // 外空:无大气传播介质,冲击波不传播
R_cut = 0.0;
break;
default:
R_cut = 0.0;
break;
}
// 3. 距离超过截止距离,毁伤为 0
if (d >= R_cut || R_cut <= 0.0) return 0.0;
// 4. 幂律衰减:空中二次方,水下三次方(衰减更快)
double damage;
if (medium == UNDERWATER) {
damage = DP * std::pow(1.0 - d / R_cut, 3.0);
} else {
damage = DP * std::pow(1.0 - d / R_cut, 2.0);
}
// 5. 战斗部类型折减(HEAT ÷5、Fragmentation ÷3、Nuclear ÷2)
switch (warheadType) {
case HEAT: damage /= 5.0; break;
case FRAGMENTATION: damage /= 3.0; break;
case NUCLEAR: damage /= 2.0; break;
default: break;
}
**计算示例(空中,DP = 100 kg TNT,d = 0.5 nm)**:
逐步推导:
1. 计算冲击波基准截止距离 `R_base`(空中):
`R_base = exp(0.3315 · ln(100) + 2.9034) = exp(0.3315 × 4.6052 + 2.9034) = exp(1.5266 + 2.9034) = exp(4.4300) ≈ 83.92 m`
2. 空中介质 `R_cut = R_base / 1852`:
`R_cut = 83.92 / 1852 ≈ 0.04531 nm`
3. 判断距离是否在截止距离内:
`d = 0.5 nm > R_cut ≈ 0.04531 nm`,目标已超出冲击波有效毁伤范围。
4. 代入空中二次方衰减公式:
`Damage = DP · (1 − d / R_cut)² = 100 · (1 − 0.5 / 0.04531)²`
5. 由于 `(1 − d / R_cut) < 0`,按算法第 3 步判定 `d ≥ R_cut`,直接返回 0。
**最终结果**:`BlastDamageAtThisDistance(100, 0.5, AIR) = 0`。
**实战案例(DP = 500 kg TNT,d = 0.02 nm,空中 vs 水下)**:
下面综合对比破片与冲击波两种毁伤机制在空、水两种介质下的表现。设战斗部当量 `DP = 500 kg TNT`,目标距离 `d = 0.02 nm`(约 37 m)。
**一、破片毁伤 FragDamageAtThisDistance**
1. 空中:`R_cut = 10 · 500^(1/3) / 1852 = 10 · 7.9370 / 1852 ≈ 0.04286 nm`
- `d = 0.02 nm < R_cut`,在有效范围内。
- `Damage = 500 · ( (0.04286 − 0.02) / 0.04286 )² = 500 · (0.5333)² ≈ 500 · 0.2844 ≈ 142.2`
2. 水下:按算法 `default` 分支,`R_cut = 0`,破片无效应,直接返回 0。
**二、冲击波毁伤 BlastDamageAtThisDistance**
1. 空中:`R_base = exp(0.3315 · ln(500) + 2.9034) = exp(0.3315 × 6.2146 + 2.9034) = exp(2.0601 + 2.9034) = exp(4.9635) ≈ 143.0 m`
- `R_cut = 143.0 / 1852 ≈ 0.07721 nm`
- `d = 0.02 nm < R_cut`,在有效范围内。
- `Damage = 500 · (1 − 0.02 / 0.07721)² = 500 · (1 − 0.2590)² = 500 · (0.7410)² ≈ 500 · 0.5491 ≈ 274.5`
2. 水下:`R_cut = R_base × 4.411497730711 / 1852 = 143.0 × 4.4115 / 1852 ≈ 0.3407 nm`
- `d = 0.02 nm < R_cut`,在有效范围内。
- 水下衰减指数取 3:`Damage = 500 · (1 − 0.02 / 0.3407)³ = 500 · (1 − 0.0587)³ = 500 · (0.9413)³ ≈ 500 · 0.8340 ≈ 417.0`
**结果汇总**:
| 场景 | 破片毁伤 | 冲击波毁伤 |
|---|---|---|
| 空中(Air) | ≈ 142.2 | ≈ 274.5 |
| 水下(Underwater) | 0 | ≈ 417.0 |
**结果差异解释**:
- **破片:空中 > 水下**。破片依赖空气/真空中的弹道飞行,水下因水的密度远大于空气,破片初速被迅速耗散,算法直接判定 `R_cut = 0`,无破片效应。空中破片毁伤(142.2)低于冲击波(274.5),说明在 0.02 nm 近距下冲击波仍是主要毁伤手段。
- **冲击波:水下 > 空中**。水下 `R_cut` 因致密介质传播更远而放大 4.41 倍(0.3407 nm vs 0.07721 nm),尽管衰减指数从 2 提高到 3,但近距离处 `(1 − d/R_cut)` 更接近 1,故水下毁伤量反而更高(417.0 vs 274.5)。这体现了"传播更远、近距更强"的介质增益。
- **战术含义**:对水下目标(如潜艇、鱼雷),破片几乎无效,应优先使用大当量战斗部或专门的水下冲击波武器;对空中目标,破片与冲击波协同作用,但冲击波覆盖半径更大,是远距毁伤的主力。
**结论**:100 kg TNT 战斗部在空中的冲击波有效截止距离约 0.045 nm(约 84 m),0.5 nm 处的目标已远超冲击波杀伤半径,冲击波毁伤量为 0。与破片示例(R_cut ≈ 0.025 nm)对比可见,冲击波传播距离约为破片的 1.8 倍,但二者在 0.5 nm 处均无法造成毁伤------该距离下需依赖更大当量或核战斗部才能覆盖。
return damage;
}
关键公式与系数来源说明:
- 破片空中截止距离
R_cut = 10 · DP^(1/3)源自立方根定律(爆炸相似律),指数 1/3 反映破片初速随当量立方根增长;外空场景因无空气阻力改为线性10 · DP。 - 冲击波基准式
R = exp(0.3315·ln W + 2.9034) = 18.23 · W^0.3315,指数 0.3315 略小于 1/3,体现大当量下能量耗散偏离理想立方根定律。 - 水下系数 4.411497730711 与地下系数 8.822995461422(恰为水下的 2 倍)与
PhysicalConstants声速一致(空气 661、水 2 916、岩石 5 832,后者恰为水的 2 倍),反映致密介质中冲击波传播更远。 - 水下衰减指数取 3(三次方)而空中取 2(二次方),体现水下冲击波随距离衰减更快。
反弹道导弹拦截(ABM)场景:毁伤量 × 2
算法:冲击波毁伤 BlastDamageAtThisDistance
空中: Damage(d) = DP · ( 1 − d / R_cut )²
水下: Damage(d) = DP · ( 1 − d / R_cut )³ (三次方,衰减更快)
R_cut = GetCutoffRange_Blast_nm(DP, medium):
基准 R_base = exp( 0.331 5 · ln(DP) + 2.903 4 ) m
空中 / 水面 R_cut = R_base
水下 R_cut = R_base × 4.411 497 730 711
地下 R_cut = R_base × 8.822 995 461 422
外空 R_cut = 0
战斗部类型折减:
HEAT(破甲) ÷ 5 能量高度定向,离轴毁伤极小
Fragmentation(杀爆)÷ 3
Nuclear(核) ÷ 2
基准式 R = exp(0.331 5·ln W + 2.903 4) 即 R = 18.23 · W^0.3315,接近立方根定律 W^(1/3)(爆炸相似律),指数略小于 1/3 反映了大当量下的能量耗散偏离。水下系数 4.41 与地下系数 8.82(恰为水下的 2 倍)体现了致密介质中冲击波传播距离更远------这与 PhysicalConstants 中的声速常量一致:空气 661、水 2 916、岩石 5 832(后者恰为水的 2 倍)。
表 5-9 地表覆盖类型对冲击波毁伤的衰减系数
地表覆盖类型 毁伤系数 物理解释
城市建成区(Urban) 0.25 建筑物遮挡,冲击波快速衰减
森林(Forest) 0.50 树冠与树干消耗冲击波能量
灌木(Shrublands) 0.75 部分遮挡
农田(Cropland) 0.85 轻微遮挡
稀树草原(Savanna) 0.90 轻微遮挡
水面 / 草地 / 湿地 / 冰雪 / 荒漠 1.00 开阔地,无遮挡,冲击波完全作用
伪代码实现(C++):
cpp
// 地表覆盖类型对冲击波毁伤的衰减系数查询
// 输入:terrain(地表覆盖类型)
// 输出:毁伤系数(0~1 区间,直接乘到毁伤量上)
double GetTerrainFactor(TerrainType terrain) {
switch (terrain) {
case URBAN: // 城市建成区:0.25,建筑物遮挡,冲击波快速衰减
return 0.25;
case FOREST: // 森林:0.50,树冠与树干消耗冲击波能量
return 0.50;
case SHRUBLANDS: // 灌木:0.75,部分遮挡
return 0.75;
case CROPLAND: // 农田:0.85,轻微遮挡
return 0.85;
case SAVANNA: // 稀树草原:0.90,轻微遮挡
return 0.90;
case WATER: // 水面 / 草地 / 湿地 / 冰雪 / 荒漠:1.00,开阔地无遮挡
case GRASSLAND:
case WETLAND:
case ICE_SNOW:
case DESERT:
return 1.00;
default: // 未知类型按开阔地处理,保证毁伤不因未知类型被错误放大
return 1.00;
}
}
物理意义说明:
- 该系数直接乘到
BlastDamageAtThisDistance与FragDamageAtThisDistance的返回值上,作为最终毁伤量的地表衰减因子。 - 系数越小表示地表覆盖对冲击波/破片能量的吸收越强:城市建成区(0.25)因建筑物遮挡衰减最剧烈,开阔地(1.00)则完全无遮挡。
- 该表在破片毁伤与冲击波毁伤中完全一致,引擎把地表覆盖统一视作"能量吸收介质";城区目标对面杀伤武器的抗性是开阔地目标的四倍(1.00 / 0.25 = 4)。
该系数表在破片毁伤与冲击波毁伤中完全一致,意味着引擎把地表覆盖统一视作"能量吸收介质"。其战术含义十分直接:城区目标对面杀伤武器的抗性是开阔地目标的四倍。