using System;
using System.Collections.Generic;
using ActiveProtect.Utility;
using ActiveProtect.Models;
namespace ActiveProtect.Simulation
{
///
/// 仿真配置类,包含整个仿真系统所需的所有配置信息
///
///
/// 该类负责管理和存储仿真系统的所有配置参数,包括:
/// - 坦克配置(位置、朝向、防护等级等)
/// - 导弹配置(类型、性能参数等)
/// - 各类告警器配置(激光、红外、毫米波、紫外等)
/// - 各类干扰器配置(激光、红外、毫米波等)
/// - 仿真时间步长等全局参数
///
/// 通过统一管理这些配置,确保仿真系统各组件的参数设置协调一致
///
public class SimulationConfig
{
///
/// 坦克配置列表
///
///
/// 包含所有参与仿真的坦克的配置参数列表
///
public List TankConfigs { get; set; }
///
/// 导弹配置列表
///
///
/// 包含所有参与仿真的导弹的配置参数列表
///
public List MissileConfigs { get; set; }
///
/// 激光指示器配置
///
///
/// 包含激光指示器的工作参数,如功率、发散角等
///
public LaserDesignatorConfig LaserDesignatorConfig { get; set; }
///
/// 激光驾束仪配置
///
///
/// 包含激光驾束仪的工作参数,如控制场范围、最大导引距离等
///
public LaserBeamRiderConfig LaserBeamRiderConfig { get; set; }
///
/// 激光告警器配置
///
///
/// 包含激光告警器的工作参数,如灵敏度阈值、告警持续时间等
///
public LaserWarnerConfig LaserWarnerConfig { get; set; }
///
/// 激光干扰器配置
///
///
/// 包含激光干扰器的工作参数,如最大功率、冷却时间等
///
public LaserJammerConfig LaserJammerConfig { get; set; }
///
/// 毫米波干扰器配置
///
///
/// 包含毫米波干扰器的工作参数,如最大功率、冷却时间等
///
public MillimeterWaveJammerConfig MillimeterWaveJammerConfig { get; set; }
///
/// 仿真时间步长
///
///
/// 仿真系统的时间步进间隔,单位:秒(s)
/// 较小的步长提供更精确的仿真,但会增加计算负担
///
public double SimulationTimeStep { get; set; }
///
/// 红外测角仪配置
///
///
/// 包含红外测角仪的工作参数,如视场角、测量精度等
///
public InfraredTrackerConfig InfraredTrackerConfig { get; set; }
///
/// 烟幕弹干扰器配置
///
///
/// 包含烟幕弹干扰器的工作参数,如发射参数、性能参数等
///
public SmokeJammerConfig SmokeJammerConfig { get; set; }
///
/// 末敏弹毫米波干扰器配置
///
///
/// 包含末敏弹毫米波干扰器的工作参数,如波长范围、角度范围等
///
public TerminalMillimeterWaveJammerConfig TerminalMillimeterWaveJammerConfig { get; set; }
///
/// 构造函数,初始化默认配置
///
///
/// 创建配置对象时:
/// 1. 初始化所有列表类型的属性
/// 2. 创建各类设备的默认配置实例
/// 3. 设置默认的仿真时间步长
///
public SimulationConfig()
{
TankConfigs = new List();
MissileConfigs = new List();
LaserDesignatorConfig = new LaserDesignatorConfig();
LaserBeamRiderConfig = new LaserBeamRiderConfig();
LaserWarnerConfig = new LaserWarnerConfig();
LaserJammerConfig = new LaserJammerConfig();
MillimeterWaveJammerConfig = new MillimeterWaveJammerConfig();
InfraredTrackerConfig = new InfraredTrackerConfig();
SmokeJammerConfig = new SmokeJammerConfig();
TerminalMillimeterWaveJammerConfig = new TerminalMillimeterWaveJammerConfig();
SimulationTimeStep = 0.1; // 默认时间步长为0.1秒
}
}
///
/// 激光指示器配置类
///
///
/// 定义了激光指示器的工作参数,包括:
/// - 设备标识信息
/// - 空间位置信息
/// - 激光性能参数
///
public class LaserDesignatorConfig
{
///
/// 激光指示器ID
///
///
/// 设备的唯一标识符
///
public string Id { get; set; }
///
/// 初始位置
///
///
/// 设备在仿真空间中的初始位置坐标
///
public Vector3D InitialPosition { get; set; }
///
/// 激光功率
///
///
/// 激光输出功率,单位:瓦特(W)
///
public double LaserPower { get; set; }
///
/// 激光发散角
///
///
/// 激光束的发散角度,单位:弧度(rad)
///
public double LaserDivergenceAngle { get; set; }
///
/// 构造函数,设置默认值
///
///
/// 初始化时:
/// - ID设为空字符串
/// - 位置设为原点
/// - 功率和发散角设为0
///
public LaserDesignatorConfig()
{
Id = "";
InitialPosition = new Vector3D(0, 0, 0);
LaserPower = 0;
LaserDivergenceAngle = 0;
}
}
///
/// 激光驾束仪配置类
///
///
/// 定义了激光驾束仪的工作参数,包括:
/// - 设备标识信息
/// - 空间位置信息
/// - 控制场参数
/// - 导引能力参数
///
public class LaserBeamRiderConfig
{
///
/// 激光驾束仪ID
///
///
/// 设备的唯一标识符
///
public string Id { get; set; }
///
/// 初始位置
///
///
/// 设备在仿真空间中的初始位置坐标
///
public Vector3D InitialPosition { get; set; }
///
/// 激光功率
///
///
/// 激光输出功率,单位:瓦特(W)
///
public double LaserPower { get; set; }
///
/// 控制场直径
///
///
/// 有效控制场的直径,单位:米(m)
///
public double ControlFieldDiameter { get; set; }
///
/// 最大导引距离
///
///
/// 最大有效导引距离,单位:米(m)
///
public double MaxGuidanceDistance { get; set; }
///
/// 构造函数,设置默认值
///
///
/// 初始化时:
/// - ID设为空字符串
/// - 位置设为原点
/// - 功率和控制场直径设为0
///
public LaserBeamRiderConfig()
{
Id = "";
InitialPosition = new Vector3D(0, 0, 0);
LaserPower = 0;
ControlFieldDiameter = 0;
}
}
///
/// 激光告警器配置类
///
///
/// 定义了激光告警器的工作参数,包括:
/// - 设备标识信息
/// - 告警灵敏度参数
/// - 告警时间参数
/// - 检测波长范围
///
public class LaserWarnerConfig
{
///
/// 激光告警器ID
///
///
/// 设备的唯一标识符
///
public string Id { get; set; }
///
/// 告警灵敏度阈值
///
///
/// 触发告警的最小激光功率密度阈值,单位:瓦特/平方米(W/m²)
///
public double SensitivityThreshold { get; set; }
///
/// 警报持续时间
///
///
/// 单次告警的持续时间,单位:秒(s)
///
public double AlarmDuration { get; set; }
///
/// 最小波长
///
///
/// 可检测的最小激光波长,单位:纳米(nm)
///
public double WavelengthMin { get; set; }
///
/// 最大波长
///
///
/// 可检测的最大激光波长,单位:纳米(nm)
///
public double WavelengthMax { get; set; }
///
/// 构造函数,设置默认值
///
///
/// 初始化时:
/// - ID设为空字符串
/// - 灵敏度阈值设为0
/// - 告警持续时间默认为5秒
/// - 波长范围初始化为0
///
public LaserWarnerConfig()
{
Id = "";
SensitivityThreshold = 0;
AlarmDuration = 5.0; // 默认警报持续5秒
WavelengthMin = 0;
WavelengthMax = 0;
}
}
///
/// 紫外线告警器配置类
///
///
/// 定义了紫外线告警器的工作参数,包括:
/// - 设备标识信息
/// - 告警灵敏度参数
/// - 告警时间参数
/// - 检测波长范围
///
public class UltravioletWarnerConfig
{
///
/// 紫外线告警器ID
///
///
/// 设备的唯一标识符
///
public string Id { get; set; }
///
/// 告警灵敏度阈值
///
///
/// 触发告警的最小紫外线辐射强度阈值,单位:瓦特/平方米(W/m²)
///
public double SensitivityThreshold { get; set; }
///
/// 警报持续时间
///
///
/// 单次告警的持续时间,单位:秒(s)
///
public double AlarmDuration { get; set; }
///
/// 最小波长
///
///
/// 可检测的最小紫外线波长,单位:纳米(nm)
///
public double WavelengthMin { get; set; }
///
/// 最大波长
///
///
/// 可检测的最大紫外线波长,单位:纳米(nm)
///
public double WavelengthMax { get; set; }
///
/// 构造函数,设置默认值
///
///
/// 初始化时:
/// - ID设为空字符串
/// - 灵敏度阈值设为0
/// - 告警持续时间默认为5秒
/// - 波长范围初始化为0
///
public UltravioletWarnerConfig()
{
Id = "";
SensitivityThreshold = 0;
AlarmDuration = 5.0; // 默认警报持续5秒
WavelengthMin = 0;
WavelengthMax = 0;
}
}
///
/// 红外告警器配置类
///
///
/// 定义了红外告警器的工作参数,包括:
/// - 设备标识信息
/// - 告警灵敏度参数
/// - 告警时间参数
/// - 检测波长范围
///
public class InfraredWarnerConfig
{
///
/// 红外告警器ID
///
///
/// 设备的唯一标识符
///
public string Id { get; set; }
///
/// 告警灵敏度阈值
///
///
/// 触发告警的最小红外辐射强度阈值,单位:瓦特/平方米(W/m²)
///
public double SensitivityThreshold { get; set; }
///
/// 警报持续时间
///
///
/// 单次告警的持续时间,单位:秒(s)
///
public double AlarmDuration { get; set; }
///
/// 最小波长
///
///
/// 可检测的最小红外波长,单位:纳米(nm)
///
public double WavelengthMin { get; set; }
///
/// 最大波长
///
///
/// 可检测的最大红外波长,单位:纳米(nm)
///
public double WavelengthMax { get; set; }
///
/// 构造函数,设置默认值
///
///
/// 初始化时:
/// - ID设为空字符串
/// - 灵敏度阈值设为0
/// - 告警持续时间默认为5秒
/// - 波长范围初始化为0
///
public InfraredWarnerConfig()
{
Id = "";
SensitivityThreshold = 0;
AlarmDuration = 5.0; // 默认警报持续5秒
WavelengthMin = 0;
WavelengthMax = 0;
}
}
///
/// 毫米波告警器配置类
///
///
/// 定义了毫米波告警器的工作参数,包括:
/// - 设备标识信息
/// - 告警灵敏度参数
/// - 告警时间参数
/// - 检测波长范围
///
public class MillimeterWaveWarnerConfig
{
///
/// 毫米波告警器ID
///
///
/// 设备的唯一标识符
///
public string Id { get; set; }
///
/// 告警灵敏度阈值
///
///
/// 触发告警的最小毫米波辐射强度阈值,单位:瓦特/平方米(W/m²)
///
public double SensitivityThreshold { get; set; }
///
/// 警报持续时间
///
///
/// 单次告警的持续时间,单位:秒(s)
///
public double AlarmDuration { get; set; }
///
/// 最小波长
///
///
/// 可检测的最小毫米波波长,单位:纳米(nm)
///
public double WavelengthMin { get; set; }
///
/// 最大波长
///
///
/// 可检测的最大毫米波波长,单位:纳米(nm)
///
public double WavelengthMax { get; set; }
///
/// 构造函数,设置默认值
///
///
/// 初始化时:
/// - ID设为空字符串
/// - 灵敏度阈值设为0
/// - 告警持续时间默认为5秒
/// - 波长范围初始化为0
///
public MillimeterWaveWarnerConfig()
{
Id = "";
SensitivityThreshold = 0;
AlarmDuration = 5.0; // 默认警报持续5秒
WavelengthMin = 0;
WavelengthMax = 0;
}
}
///
/// 激光干扰器配置类
///
///
/// 定义了激光干扰器的工作参数,包括:
/// - 设备标识信息
/// - 干扰功率参数
/// - 冷却时间参数
/// - 功率增长特性
///
public class LaserJammerConfig
{
///
/// 激光干扰器ID
///
///
/// 设备的唯一标识符
///
public string Id { get; set; }
///
/// 最大干扰冷却时间
///
///
/// 干扰器停止后需要的冷却时间,单位:秒(s)
///
public double MaxJammingCooldown { get; set; }
///
/// 最大干扰功率
///
///
/// 干扰器能够输出的最大功率,单位:瓦特(W)
///
public double MaxJammingPower { get; set; }
///
/// 初始干扰功率
///
///
/// 干扰器启动时的初始功率,单位:瓦特(W)
///
public double InitialJammingPower { get; set; }
///
/// 功率增加速率
///
///
/// 干扰功率的增长速率,单位:瓦特/秒(W/s)
///
public double PowerIncreaseRate { get; set; }
///
/// 构造函数,设置默认值
///
///
/// 初始化时:
/// - ID设为空字符串
/// - 冷却时间设为5秒
/// - 最大功率设为10kW
/// - 初始功率设为最大功率的40%
/// - 功率增长率设为2kW/s
///
public LaserJammerConfig()
{
Id = "";
MaxJammingCooldown = 5.0;
MaxJammingPower = 10000.0;
InitialJammingPower = 4000.0;
PowerIncreaseRate = 2000.0; // 每秒增加的功率
}
}
///
/// 红外测角仪配置类
///
///
/// 定义了红外测角仪的工作参数,包括:
/// - 设备标识信息
/// - 空间位置信息
/// - 测量性能参数
/// - 更新频率参数
///
public class InfraredTrackerConfig
{
///
/// 红外测角仪ID
///
///
/// 设备的唯一标识符
///
public string Id { get; set; }
///
/// 初始位置
///
///
/// 设备在仿真空间中的初始位置坐标
///
public Vector3D InitialPosition { get; set; }
///
/// 初始朝向
///
///
/// 设备的初始朝向角度
///
public Orientation InitialOrientation { get; set; }
///
/// 最大跟踪距离
///
///
/// 设备能够有效跟踪目标的最大距离,单位:米(m)
///
public double MaxTrackingRange { get; set; }
///
/// 视场角
///
///
/// 设备的视场角度,单位:弧度(rad)
///
public double FieldOfView { get; set; }
///
/// 角度测量精度
///
///
/// 角度测量的精度,单位:弧度(rad)
///
public double AngleMeasurementAccuracy { get; set; }
///
/// 更新频率
///
///
/// 设备更新测量数据的频率,单位:赫兹(Hz)
///
public double UpdateFrequency { get; set; }
///
/// 构造函数,设置默认值
///
///
/// 初始化时:
/// - ID设为空字符串
/// - 位置设为原点
/// - 朝向设为0
/// - 最大跟踪距离设为10km
/// - 视场角设为60度
/// - 角度精度设为0.001弧度
/// - 更新频率设为10Hz
///
public InfraredTrackerConfig()
{
Id = "";
InitialPosition = new Vector3D(0, 0, 0);
InitialOrientation = new Orientation(0, 0, 0);
MaxTrackingRange = 10000; // 10公里
FieldOfView = Math.PI / 3; // 60度
AngleMeasurementAccuracy = 0.001; // 0.001弧度 (约0.057度)
UpdateFrequency = 10; // 10赫兹
}
}
///
/// 毫米波干扰器配置类
///
///
/// 定义了毫米波干扰器的工作参数,包括:
/// - 设备标识信息
/// - 干扰功率参数
/// - 冷却时间参数
/// - 功率增长特性
///
public class MillimeterWaveJammerConfig
{
///
/// 干扰器ID
///
///
/// 设备的唯一标识符
///
public string Id { get; set; }
///
/// 最大干扰功率
///
///
/// 干扰器能够输出的最大功率,单位:瓦特(W)
///
public double MaxJammingPower { get; set; }
///
/// 初始干扰功率
///
///
/// 干扰器启动时的初始功率,单位:瓦特(W)
///
public double InitialJammingPower { get; set; }
///
/// 功率增长率
///
///
/// 干扰功率的增长速率,单位:瓦特/秒(W/s)
///
public double PowerIncreaseRate { get; set; }
///
/// 最大冷却时间
///
///
/// 干扰器停止后需要的冷却时间,单位:秒(s)
///
public double MaxJammingCooldown { get; set; }
///
/// 构造函数,设置默认值
///
///
/// 初始化时:
/// - ID设为空字符串
/// - 最大功率设为1kW
/// - 初始功率设为400W
/// - 功率增长率设为200W/s
/// - 冷却时间设为5秒
///
public MillimeterWaveJammerConfig()
{
Id = "";
MaxJammingPower = 1000;
InitialJammingPower = 400;
PowerIncreaseRate = 200;
MaxJammingCooldown = 5;
}
}
///
/// 烟幕弹干扰器配置类
///
///
/// 定义了烟幕弹干扰器的工作参数,包括:
/// - 发射参数
/// - 性能参数
/// - 干扰功率参数
/// - 时间控制参数
///
public class SmokeJammerConfig
{
///
/// 干扰器ID
///
///
/// 设备的唯一标识符
///
public string Id { get; set; }
#region 发射参数
///
/// 发射角度
///
///
/// 烟幕弹发射角度,单位:弧度(rad)
///
public float LaunchAngle { get; set; }
///
/// 烟幕种类
///
///
/// 烟幕弹的类型(红外、毫米波、多谱段)
///
public SmokeType Type { get; set; }
///
/// 发射数量
///
///
/// 单次发射的烟幕弹数量
///
public int Count { get; set; }
#endregion
#region 性能参数
///
/// 爆炸高度
///
///
/// 烟幕弹爆炸的理想高度,单位:米(m)
///
public float ExplosionHeight { get; set; }
///
/// 烟幕直径
///
///
/// 烟幕形成的理想直径,单位:米(m)
///
public float SmokeDiameter { get; set; }
///
/// 辐射吸收率
///
///
/// 烟幕对电磁波的吸收率,范围:0-1
///
public float AbsorptionRate { get; set; }
///
/// 初始浓度
///
///
/// 烟幕形成时的初始浓度,单位:千克/立方米(kg/m³)
///
public float InitialDensity { get; set; }
#endregion
#region 时间参数
///
/// 扩散时间
///
///
/// 烟幕达到预期直径所需时间,单位:秒(s)
///
public float DiffusionTime { get; set; }
///
/// 干扰响应时间
///
///
/// 从发射到形成有效干扰的时间,单位:秒(s)
///
public float ResponseTime { get; set; }
///
/// 有效时间
///
///
/// 烟幕维持有效干扰的时间,单位:秒(s)
///
public float EffectiveTime { get; set; }
#endregion
#region 干扰功率参数
///
/// 最大干扰功率
///
///
/// 干扰器能够输出的最大功率,单位:瓦特(W)
///
public double MaxJammingPower { get; set; }
///
/// 初始干扰功率
///
///
/// 干扰器启动时的初始功率,单位:瓦特(W)
///
public double InitialJammingPower { get; set; }
///
/// 功率增长率
///
///
/// 干扰功率的增长速率,单位:瓦特/秒(W/s)
///
public double PowerIncreaseRate { get; set; }
///
/// 最大冷却时间
///
///
/// 干扰器停止后需要的冷却时间,单位:秒(s)
///
public double MaxJammingCooldown { get; set; }
#endregion
///
/// 构造函数,设置默认值
///
///
/// 初始化时:
/// - ID设为空字符串
/// - 发射角度设为45度
/// - 烟幕类型设为多谱段
/// - 发射数量设为1
/// - 其他参数设置为合理的默认值
///
public SmokeJammerConfig()
{
Id = "";
LaunchAngle = (float)(Math.PI / 4); // 45度
Type = SmokeType.Multispectral;
Count = 1;
ExplosionHeight = 10.0f;
SmokeDiameter = 20.0f;
AbsorptionRate = 0.8f;
InitialDensity = 0.5f;
DiffusionTime = 3.0f;
ResponseTime = 1.0f;
EffectiveTime = 60.0f;
MaxJammingPower = 1000;
InitialJammingPower = 400;
PowerIncreaseRate = 200;
MaxJammingCooldown = 5;
}
}
///
/// 末敏弹毫米波干扰器配置类
///
///
/// 定义了末敏弹毫米波干扰器的工作参数,包括:
/// - 干扰波长和角度范围
/// - 响应时间和有效距离
/// - 干扰概率和探测距离
/// - 脉冲参数
/// - 干扰功率参数
///
public class TerminalMillimeterWaveJammerConfig
{
///
/// 干扰器ID
///
///
/// 设备的唯一标识符
///
public string Id { get; set; }
#region 干扰参数
///
/// 干扰波长范围
///
///
/// 干扰器工作的波长范围,单位:毫米(mm)
///
public (double Min, double Max) WavelengthRange { get; set; }
///
/// 角度范围
///
///
/// 干扰器的工作角度范围,单位:弧度(rad)
///
public (double Min, double Max) AngleRange { get; set; }
///
/// 响应时间
///
///
/// 从接收到威胁到形成有效干扰的时间,单位:秒(s)
///
public double ResponseTime { get; set; }
///
/// 有效距离
///
///
/// 干扰器能够产生有效干扰的最大距离,单位:米(m)
///
public double EffectiveRange { get; set; }
///
/// 干扰概率
///
///
/// 在有效距离内产生有效干扰的概率,范围:0-1
///
public double JammingProbability { get; set; }
///
/// 探测距离
///
///
/// 干扰器能够探测到威胁的最大距离,单位:米(m)
///
public double DetectionRange { get; set; }
///
/// 脉冲频率
///
///
/// 干扰信号的脉冲重复频率,单位:赫兹(Hz)
///
public double PulseFrequency { get; set; }
///
/// 脉冲宽度
///
///
/// 干扰信号的脉冲持续时间,单位:秒(s)
///
public double PulseWidth { get; set; }
#endregion
#region 干扰功率参数
///
/// 最大干扰功率
///
///
/// 干扰器能够输出的最大功率,单位:瓦特(W)
///
public double MaxJammingPower { get; set; }
///
/// 初始干扰功率
///
///
/// 干扰器启动时的初始功率,单位:瓦特(W)
///
public double InitialJammingPower { get; set; }
///
/// 功率增长率
///
///
/// 干扰功率的增长速率,单位:瓦特/秒(W/s)
///
public double PowerIncreaseRate { get; set; }
///
/// 最大冷却时间
///
///
/// 干扰器停止后需要的冷却时间,单位:秒(s)
///
public double MaxJammingCooldown { get; set; }
#endregion
///
/// 构造函数,设置默认值
///
///
/// 初始化时:
/// - ID设为空字符串
/// - 波长范围设为2-4mm
/// - 角度范围设为±30度
/// - 响应时间设为0.1秒
/// - 其他参数设置为合理的默认值
///
public TerminalMillimeterWaveJammerConfig()
{
Id = "";
WavelengthRange = (2.0, 4.0); // 2-4毫米
AngleRange = (-Math.PI/6, Math.PI/6); // ±30度
ResponseTime = 0.1; // 0.1秒
EffectiveRange = 1000.0; // 1000米
JammingProbability = 0.8; // 80%成功率
DetectionRange = 2000.0; // 2000米
PulseFrequency = 1000.0; // 1000Hz
PulseWidth = 1e-6; // 1微秒
MaxJammingPower = 1000.0; // 1000瓦
InitialJammingPower = 400.0; // 400瓦
PowerIncreaseRate = 2000.0; // 2000瓦/秒
MaxJammingCooldown = 5.0; // 5秒
}
}
}