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秒 } } }