报告重构: 仿真结果提前到第一章, 统一七章结构
This commit is contained in:
parent
50b7bd7f69
commit
04e02c43eb
@ -14,11 +14,14 @@ namespace CounterDrone.Core.Services
|
|||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
var platforms = config.Equipment.Where(e => e.EquipmentRole == (int)EquipmentRole.LaunchPlatform).ToList();
|
var platforms = config.Equipment.Where(e => e.EquipmentRole == (int)EquipmentRole.LaunchPlatform).ToList();
|
||||||
var detections = config.Equipment.Where(e => e.EquipmentRole == (int)EquipmentRole.Detection).ToList();
|
|
||||||
var target = config.Targets.FirstOrDefault();
|
var target = config.Targets.FirstOrDefault();
|
||||||
var scene = config.Scene;
|
var scene = config.Scene;
|
||||||
|
var destroyed = events.Count(e => e.Type == SimEventType.DroneDestroyed);
|
||||||
|
var reached = events.Count(e => e.Type == SimEventType.DroneReachedTarget);
|
||||||
|
var intruded = events.Count(e => e.Type == SimEventType.ZoneIntruded);
|
||||||
|
var totalDrones = config.Targets.Sum(t => t.Quantity);
|
||||||
|
var result = DetermineInterceptResult(destroyed, reached + intruded, totalDrones);
|
||||||
|
|
||||||
// === 头部 ===
|
|
||||||
sb.AppendLine("# 仿真评估报告");
|
sb.AppendLine("# 仿真评估报告");
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
sb.AppendLine($"| 项目 | 值 |");
|
sb.AppendLine($"| 项目 | 值 |");
|
||||||
@ -29,8 +32,23 @@ namespace CounterDrone.Core.Services
|
|||||||
sb.AppendLine($"| 气溶胶类型 | {TranslateAerosol((AerosolType)config.Cloud.AerosolType)} |");
|
sb.AppendLine($"| 气溶胶类型 | {TranslateAerosol((AerosolType)config.Cloud.AerosolType)} |");
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
|
|
||||||
// === 一、环境 ===
|
// === 一、仿真结果 ===
|
||||||
sb.AppendLine("## 一、作战环境");
|
sb.AppendLine("## 一、仿真结果");
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine($"| 统计项 | 值 |");
|
||||||
|
sb.AppendLine($"|--------|-----|");
|
||||||
|
sb.AppendLine($"| 无人机总数 | {totalDrones} |");
|
||||||
|
sb.AppendLine($"| 被摧毁 | {destroyed} |");
|
||||||
|
sb.AppendLine($"| 到达目标 | {reached} |");
|
||||||
|
sb.AppendLine($"| 侵入管控区 | {intruded} |");
|
||||||
|
sb.AppendLine($"| 弹药发射 | {events.Count(e => e.Type == SimEventType.MunitionLaunched)} |");
|
||||||
|
sb.AppendLine($"| 云团生成 | {events.Count(e => e.Type == SimEventType.CloudGenerated)} |");
|
||||||
|
sb.AppendLine();
|
||||||
|
sb.AppendLine($"**对抗结果**:{TranslateResult(result)}");
|
||||||
|
sb.AppendLine();
|
||||||
|
|
||||||
|
// === 二、作战环境 ===
|
||||||
|
sb.AppendLine("## 二、作战环境");
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
sb.AppendLine($"| 参数 | 值 |");
|
sb.AppendLine($"| 参数 | 值 |");
|
||||||
sb.AppendLine($"|------|-----|");
|
sb.AppendLine($"|------|-----|");
|
||||||
@ -41,47 +59,45 @@ namespace CounterDrone.Core.Services
|
|||||||
sb.AppendLine($"| 能见度 | {scene.Visibility} m |");
|
sb.AppendLine($"| 能见度 | {scene.Visibility} m |");
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
|
|
||||||
// === 二、目标 ===
|
// === 三、威胁目标 ===
|
||||||
sb.AppendLine("## 二、威胁目标");
|
sb.AppendLine("## 三、威胁目标");
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
sb.AppendLine($"| 参数 | 值 |");
|
sb.AppendLine($"| 参数 | 值 |");
|
||||||
sb.AppendLine($"|------|-----|");
|
sb.AppendLine($"|------|-----|");
|
||||||
sb.AppendLine($"| 类型 | {TranslateTarget((TargetType)(target?.TargetType ?? 0))} |");
|
sb.AppendLine($"| 类型 | {TranslateTarget((TargetType)(target?.TargetType ?? 0))} |");
|
||||||
sb.AppendLine($"| 数量 | {config.Targets.Sum(t => t.Quantity)} 架 |");
|
sb.AppendLine($"| 数量 | {totalDrones} 架 |");
|
||||||
sb.AppendLine($"| 速度 | {target?.TypicalSpeed ?? 0} km/h |");
|
sb.AppendLine($"| 速度 | {target?.TypicalSpeed ?? 0} km/h |");
|
||||||
sb.AppendLine($"| 高度 | {target?.TypicalAltitude ?? 0} m |");
|
sb.AppendLine($"| 高度 | {target?.TypicalAltitude ?? 0} m |");
|
||||||
sb.AppendLine($"| 动力 | {TranslatePower((PowerType)(target?.PowerType ?? 0))} |");
|
sb.AppendLine($"| 动力 | {TranslatePower((PowerType)(target?.PowerType ?? 0))} |");
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
|
|
||||||
// === 三、推荐方案 ===
|
// === 四、推荐方案 ===
|
||||||
if (config.Cloud.Source == "Algorithm" && config.Cloud.EstimatedProbability.HasValue)
|
if (config.Cloud.Source == "Algorithm" && config.Cloud.EstimatedProbability.HasValue)
|
||||||
{
|
{
|
||||||
sb.AppendLine("## 三、推荐方案");
|
sb.AppendLine("## 四、推荐方案");
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
sb.AppendLine($"| 参数 | 值 |");
|
sb.AppendLine($"| 参数 | 值 |");
|
||||||
sb.AppendLine($"|------|-----|");
|
sb.AppendLine($"|------|-----|");
|
||||||
sb.AppendLine($"| 气溶胶类型 | {TranslateAerosol((AerosolType)config.Cloud.AerosolType)} |");
|
|
||||||
sb.AppendLine($"| 发射方式 | {TranslateRelease((ReleaseMode)config.Cloud.ReleaseMode)} |");
|
sb.AppendLine($"| 发射方式 | {TranslateRelease((ReleaseMode)config.Cloud.ReleaseMode)} |");
|
||||||
sb.AppendLine($"| 弹药数 | {config.Cloud.SalvoRounds} 发 |");
|
sb.AppendLine($"| 弹药数 | {config.Cloud.SalvoRounds} 发 |");
|
||||||
sb.AppendLine($"| 云团间距 | {config.Cloud.SalvoSpacing:F0} m |");
|
sb.AppendLine($"| 云团间距 | {config.Cloud.SalvoSpacing:F0} m |");
|
||||||
sb.AppendLine($"| 拦截概率(算法估计) | {config.Cloud.EstimatedProbability.Value:P0} |");
|
sb.AppendLine($"| 拦截概率 | {config.Cloud.EstimatedProbability.Value:P0} |");
|
||||||
sb.AppendLine($"| 抛撒时机 | {config.Cloud.RecommendedTiming:F0}s |");
|
sb.AppendLine($"| 抛撒时机 | {config.Cloud.RecommendedTiming:F0}s |");
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
// === 四、我方部署 ===
|
// === 五、我方部署 ===
|
||||||
sb.AppendLine("## 四、我方部署");
|
sb.AppendLine("## 五、我方部署");
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
sb.AppendLine($"| 装备 | 数量 |");
|
sb.AppendLine($"| 装备 | 数量 |");
|
||||||
sb.AppendLine($"|------|------|");
|
sb.AppendLine($"|------|------|");
|
||||||
sb.AppendLine($"| 发射平台 | {platforms.Sum(p => p.Quantity)} 台 |");
|
sb.AppendLine($"| 发射平台 | {platforms.Sum(p => p.Quantity)} 台 |");
|
||||||
sb.AppendLine($"| 探测设备 | {detections.Sum(d => d.Quantity)} 台 |");
|
|
||||||
sb.AppendLine($"| 云团位置 | ({config.Cloud.PositionX:F0}, {config.Cloud.PositionY:F0}, {config.Cloud.PositionZ:F0}) |");
|
sb.AppendLine($"| 云团位置 | ({config.Cloud.PositionX:F0}, {config.Cloud.PositionY:F0}, {config.Cloud.PositionZ:F0}) |");
|
||||||
sb.AppendLine($"| 释放高度 | {config.Cloud.DisperseHeight:F0} m |");
|
sb.AppendLine($"| 释放高度 | {config.Cloud.DisperseHeight:F0} m |");
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
|
|
||||||
// === 三、事件时序 ===
|
// === 六、事件时序 ===
|
||||||
sb.AppendLine("## 五、事件时序");
|
sb.AppendLine("## 六、事件时序");
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
sb.AppendLine("| 时间(s) | 事件 | 详情 |");
|
sb.AppendLine("| 时间(s) | 事件 | 详情 |");
|
||||||
sb.AppendLine("|---------|------|------|");
|
sb.AppendLine("|---------|------|------|");
|
||||||
@ -102,11 +118,11 @@ namespace CounterDrone.Core.Services
|
|||||||
}
|
}
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
|
|
||||||
// === 四、时间线分析 ===
|
// === 七、时间线 ===
|
||||||
var launchTime = events.Where(e => e.Type == SimEventType.MunitionLaunched).Select(e => e.OccurredAt).DefaultIfEmpty(0).Min();
|
var launchTime = events.Where(e => e.Type == SimEventType.MunitionLaunched).Select(e => e.OccurredAt).DefaultIfEmpty(0).Min();
|
||||||
var cloudTime = events.Where(e => e.Type == SimEventType.CloudGenerated).Select(e => e.OccurredAt).DefaultIfEmpty(0).Min();
|
var cloudTime = events.Where(e => e.Type == SimEventType.CloudGenerated).Select(e => e.OccurredAt).DefaultIfEmpty(0).Min();
|
||||||
var destroyTime = events.Where(e => e.Type == SimEventType.DroneDestroyed).Select(e => e.OccurredAt).DefaultIfEmpty(0).Min();
|
var destroyTime = events.Where(e => e.Type == SimEventType.DroneDestroyed).Select(e => e.OccurredAt).DefaultIfEmpty(0).Min();
|
||||||
sb.AppendLine("## 六、时间线");
|
sb.AppendLine("## 七、时间线");
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
sb.AppendLine($"| 阶段 | 时间 | 耗时 |");
|
sb.AppendLine($"| 阶段 | 时间 | 耗时 |");
|
||||||
sb.AppendLine($"|------|------|------|");
|
sb.AppendLine($"|------|------|------|");
|
||||||
@ -117,27 +133,6 @@ namespace CounterDrone.Core.Services
|
|||||||
sb.AppendLine($"| 总耗时 | 0 → {simulationDuration:F1}s | {simulationDuration:F1}s |");
|
sb.AppendLine($"| 总耗时 | 0 → {simulationDuration:F1}s | {simulationDuration:F1}s |");
|
||||||
sb.AppendLine();
|
sb.AppendLine();
|
||||||
|
|
||||||
// === 五、统计 ===
|
|
||||||
var destroyed = events.Count(e => e.Type == SimEventType.DroneDestroyed);
|
|
||||||
var reached = events.Count(e => e.Type == SimEventType.DroneReachedTarget);
|
|
||||||
var intruded = events.Count(e => e.Type == SimEventType.ZoneIntruded);
|
|
||||||
var totalDrones = config.Targets.Sum(t => t.Quantity);
|
|
||||||
var result = DetermineInterceptResult(destroyed, reached + intruded, totalDrones);
|
|
||||||
|
|
||||||
sb.AppendLine("## 七、结果统计");
|
|
||||||
sb.AppendLine();
|
|
||||||
sb.AppendLine($"| 统计项 | 值 |");
|
|
||||||
sb.AppendLine($"|--------|-----|");
|
|
||||||
sb.AppendLine($"| 无人机总数 | {totalDrones} |");
|
|
||||||
sb.AppendLine($"| 被摧毁 | {destroyed} |");
|
|
||||||
sb.AppendLine($"| 到达目标 | {reached} |");
|
|
||||||
sb.AppendLine($"| 侵入管控区 | {intruded} |");
|
|
||||||
sb.AppendLine($"| 弹药发射 | {events.Count(e => e.Type == SimEventType.MunitionLaunched)} |");
|
|
||||||
sb.AppendLine($"| 云团生成 | {events.Count(e => e.Type == SimEventType.CloudGenerated)} |");
|
|
||||||
sb.AppendLine();
|
|
||||||
sb.AppendLine($"**对抗结果**:{TranslateResult(result)}");
|
|
||||||
sb.AppendLine();
|
|
||||||
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,10 +182,8 @@ namespace CounterDrone.Core.Services
|
|||||||
|
|
||||||
private static string TranslateRelease(ReleaseMode r) => r switch
|
private static string TranslateRelease(ReleaseMode r) => r switch
|
||||||
{
|
{
|
||||||
ReleaseMode.Single => "单次齐射",
|
ReleaseMode.Single => "单次齐射", ReleaseMode.Continuous => "连续释放",
|
||||||
ReleaseMode.Continuous => "连续释放",
|
ReleaseMode.Pulse => "脉冲释放", _ => r.ToString(),
|
||||||
ReleaseMode.Pulse => "脉冲释放",
|
|
||||||
_ => r.ToString(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private static string TranslateEvent(SimEventType t) => t switch
|
private static string TranslateEvent(SimEventType t) => t switch
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user