From 47761e51244055dbe5cdbc7d1186dc8a0f7e7d76 Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Sat, 13 Jun 2026 17:48:47 +0800 Subject: [PATCH] =?UTF-8?q?diagnostic:=20Jet=20hit=5Flog=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?3/6=E4=BA=91=E5=91=BD=E4=B8=AD(56m=E6=AD=A5=E8=B7=B3=E8=BF=873?= =?UTF-8?q?=E4=B8=AA)=EF=BC=8CTimeScale=E9=BB=98=E8=AE=A4=E6=94=B9?= =?UTF-8?q?=E5=9B=9E1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Simulation/SimulationEngine.cs | 13 ++++++++++++- .../CounterDrone.Core.Tests/FullPipelineTests.cs | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/CounterDrone.Core/Simulation/SimulationEngine.cs b/src/CounterDrone.Core/Simulation/SimulationEngine.cs index c293b1e..045aee9 100644 --- a/src/CounterDrone.Core/Simulation/SimulationEngine.cs +++ b/src/CounterDrone.Core/Simulation/SimulationEngine.cs @@ -47,6 +47,7 @@ namespace CounterDrone.Core.Simulation private readonly List _fireSchedule = new(); private int _nextFireIndex; private readonly List _allEvents = new(); + private System.Text.StringBuilder _hitLog = new(); private SQLiteConnection _frameDb = null!; private string _taskId = string.Empty; private readonly IDefensePlanner _planner; @@ -128,6 +129,8 @@ namespace CounterDrone.Core.Simulation _munitions.Clear(); _clouds.Clear(); _allEvents.Clear(); + _hitLog.Clear(); + _hitLog.AppendLine("droneX,droneY,cloudX,cloudY,dist,radius,inside"); FrameIndex = 0; SimulationTime = 0; _entityCounter = 0; @@ -244,7 +247,13 @@ namespace CounterDrone.Core.Simulation { foreach (var cloud in _clouds) { - if (cloud.ContainsPoint(drone.PosX, drone.PosY, drone.PosZ)) + var dx = drone.PosX - cloud.Dispersion.Center.X; + var dy = drone.PosY - cloud.Dispersion.Center.Y; + var dz = drone.PosZ - cloud.Dispersion.Center.Z; + var dist = (float)System.Math.Sqrt(dx * dx + dy * dy + dz * dz); + bool inside = dist <= cloud.Dispersion.EffectiveRadius; + _hitLog.AppendLine($"{drone.PosX:F1},{drone.PosY:F1},{cloud.Dispersion.Center.X:F1},{cloud.Dispersion.Center.Y:F1},{dist:F1},{cloud.Dispersion.EffectiveRadius:F1},{inside}"); + if (inside) { drone.ExposureTime += scaledDt; var dmg = _damageModel.CalculateDamage(drone.TargetType, drone.PowerType, cloud.AerosolType, cloud.Dispersion.CoreDensity, drone.ExposureTime, scaledDt); @@ -257,6 +266,8 @@ namespace CounterDrone.Core.Simulation } } } + if (_hitLog.Length > 0 && SimulationTime >= 120) + System.IO.File.WriteAllText(@"C:\Users\Tellme\Desktop\hit_log.csv", _hitLog.ToString()); // 5. 无人机移动 foreach (var drone in _drones.Where(d => d.Status == DroneStatus.Flying)) diff --git a/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs b/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs index 01c2331..137f7ac 100644 --- a/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs +++ b/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs @@ -47,7 +47,7 @@ namespace CounterDrone.Core.Tests if (Directory.Exists(_testDir)) Directory.Delete(_testDir, true); } - private SimulationEngine RunSimulation(int maxTicks, float tickDt = 1f / 20f, float timeScale = 8f) + private SimulationEngine RunSimulation(int maxTicks, float tickDt = 1f / 20f, float timeScale = 1f) { var engine = new SimulationEngine(_scenario, _frameStore, new DamageModelRouter(), _paths, new DefaultDefensePlanner(_ammoCatalog));