using System; using System.Threading; using ActiveProtect.Simulation; using ActiveProtect.Models; using ActiveProtect.Utility; using System.Collections.Generic; namespace ActiveProtect { /// /// 主程序 /// class Program { static void Main(string[] args) { // 初始化坦克信息 TankInfo tankinfo = new() { xp = 100, yp = 0, zp = 100 }; // 创建仿真配置 var config = new SimulationConfig { // 配置坦克 TankConfigs = new List { new(tankinfo) { Id = "Tank_1", InitialOrientation = new Orientation(Math.PI/4, 0, 0), InitialSpeed = 20, MaxSpeed = 25, MaxArmor = 100, InfraredRadiationIntensity = 150, RadarCrossSection = 10, RadiationTemperature = 10, HasLaserWarner = false, HasLaserJammer = true } }, // 配置激光指示器 LaserDesignatorConfig = new LaserDesignatorConfig { Id = "LD_1", InitialPosition = new Vector3D(2000, 150, 100), LaserPower = 1e6, LaserDivergenceAngle = 0.01 }, // 配置激光告警器 LaserWarnerConfig = new LaserWarnerConfig { Id = "LW_1", AlarmDuration = 5.0 }, // 配置激光干扰器 LaserJammerConfig = new LaserJammerConfig { Id = "LJ_1", MaxJammingCooldown = 5.0, MaxJammingPower = 10000.0, InitialJammingPower = 4000.0, PowerIncreaseRate = 2000.0 }, // 配置激光驾束仪 LaserBeamRiderConfig = new LaserBeamRiderConfig { Id = "LBR_1", InitialPosition = new Vector3D(2000, 10, 100), LaserPower = 1000, ControlFieldDiameter = 6 }, // 配置导弹 MissileConfigs = new List { // 激光半主动制导导弹配置 new() { Id = "LSGM_1", TargetId = "Tank_1", InitialPosition = new Vector3D(2000, 100, 100), InitialOrientation = new Orientation(Math.PI, -0.1, 0), InitialSpeed = 700, MaxSpeed = 800, MaxFlightTime = 10, MaxFlightDistance = 5000, LaunchAcceleration = 50, MaxEngineBurnTime = 10, MaxAcceleration = 400, ProportionalNavigationCoefficient = 4, ExplosionRadius = 5, HitProbability = 0.9, Mass = 50, Type = MissileType.LaserSemiActiveGuidance }, // 激光驾束制导导弹配置 new() { Id = "LBRM_1", TargetId = "Tank_1", InitialPosition = new Vector3D(2000, 10, 100), InitialOrientation = new Orientation(Math.PI, 0.0, 0.0), InitialSpeed = 300, MaxSpeed = 400, MaxFlightTime = 10, MaxFlightDistance = 3000, LaunchAcceleration = 50, MaxEngineBurnTime = 10, MaxAcceleration = 400, ProportionalNavigationCoefficient = 3, ExplosionRadius = 5, HitProbability = 0.9, Mass = 50, Type = MissileType.LaserBeamRiderGuidance }, // 末敏弹配置 new() { Id = "TSM_1", TargetId = "Tank_1", InitialPosition = new Vector3D(3000, 0, 100), // 发射位置 InitialOrientation = new Orientation(Math.PI, 0, 0), // 使用计算得到的发射角度 InitialSpeed = 800, MaxSpeed = 1000, MaxFlightTime = 30, MaxFlightDistance = 5000, LaunchAcceleration = 0, MaxEngineBurnTime = 0, MaxAcceleration = 10, ProportionalNavigationCoefficient = 3, ExplosionRadius = 5, HitProbability = 0.9, Mass = 50, Type = MissileType.TerminalSensitiveMissile }, // 红外指令制导导弹配置 new() { Id = "ICGM_1", TargetId = "Tank_1", InitialPosition = new Vector3D(2000, 10, 100), InitialOrientation = new Orientation(Math.PI, 0.0, 0), InitialSpeed = 300, MaxSpeed = 400, MaxFlightTime = 60, MaxFlightDistance = 5000, LaunchAcceleration = 50, MaxEngineBurnTime = 10, MaxAcceleration = 100, ExplosionRadius = 5, HitProbability = 0.9, ProportionalNavigationCoefficient = 3, Mass = 50, Type = MissileType.InfraredCommandGuidance }, // 红外成像末制导导弹配置 new() { Id = "ITGM_1", TargetId = "Tank_1", InitialPosition = new Vector3D(2000, 100, 100), InitialOrientation = new Orientation(Math.PI, 0.0, 0), InitialSpeed = 300, MaxSpeed = 400, MaxFlightTime = 60, MaxFlightDistance = 5000, LaunchAcceleration = 50, MaxEngineBurnTime = 10, MaxAcceleration = 50, ExplosionRadius = 5, HitProbability = 0.9, ProportionalNavigationCoefficient = 3, Mass = 50, Type = MissileType.InfraredImagingTerminalGuidance }, // 毫米波导引头制导导弹配置 new() { Id = "MMWG_1", TargetId = "Tank_1", InitialPosition = new Vector3D(2000, 10, 100), InitialOrientation = new Orientation(Math.PI, 0.0, 0), InitialSpeed = 300, MaxSpeed = 400, MaxFlightTime = 60, MaxFlightDistance = 5000, LaunchAcceleration = 50, MaxEngineBurnTime = 10, MaxAcceleration = 50, ExplosionRadius = 5, HitProbability = 0.9, ProportionalNavigationCoefficient = 3, Mass = 50, Type = MissileType.MillimeterWaveTerminalGuidance } }, // 配置红外测角仪 InfraredTrackerConfig = new InfraredTrackerConfig { Id = "IT_1", InitialPosition = new Vector3D(2000, 0, 100), InitialOrientation = new Orientation(Math.PI, 0, 0), MaxTrackingRange = 10000, // 10公里 FieldOfView = Math.PI / 4, // 45度 AngleMeasurementAccuracy = 0.0005, // 0.0005弧度 (约0.029度) UpdateFrequency = 100 // 100赫兹 }, SimulationTimeStep = 0.01 // 仿真时间步长, 激光驾束制导导弹需要更小的步长,< 0.025s }; // 创建仿真管理器 var simulationManager = new SimulationManager(config); // 运行仿真 int maxIterations = 10000; int iteration = 0; while (!simulationManager.IsSimulationEnded && iteration < maxIterations) { simulationManager.Update(); simulationManager.PrintStatus(); Thread.Sleep(20); // 暂停100毫秒,使输出更易读 iteration++; } Console.WriteLine("仿真结束"); } } }