# 导弹仿真示例 本目录包含了使用仿真系统进行导弹仿真的示例代码。这些示例展示了如何配置和运行不同类型的导弹仿真。 ## 关于本库 ThreatSource 是一个基于 .NET 8.0 的类库,提供了完整的导弹仿真功能。 ## 系统要求 ### C#/.NET 用户 - .NET 8.0 或更高版本 - 通过 NuGet 包管理器安装或直接引用 ThreatSource.dll ### C++用户 本库是一个 .NET 类库,C++用户需要通过 C++/CLI 包装层来使用: - Windows 操作系统 - Visual Studio 2019 或更高版本 - 创建 C++/CLI 项目并引用 ThreatSource.dll ## 示例文件 ### C#示例 ([IRMissileSimulation.cs](IRMissileSimulation.cs)) 红外成像制导导弹仿真示例,展示了: - 如何创建和配置导弹实体 - 如何设置红外成像制导系统 - 如何配置仿真环境和参数 - 如何运行仿真并获取结果 #### 源代码 ```csharp using ThreatSource.Simulation; using ThreatSource.Missile; using ThreatSource.Sensor; using ThreatSource.Target; /// /// 红外成像制导导弹仿真示例 /// public class IRMissileSimulation { private readonly ISimulationManager _simulationManager; private readonly IMissileFactory _missileFactory; private readonly ITargetFactory _targetFactory; private readonly ISensorFactory _sensorFactory; public IRMissileSimulation() { _simulationManager = new SimulationManager(); _missileFactory = new MissileFactory(); _targetFactory = new TargetFactory(); _sensorFactory = new SensorFactory(); } /// /// 运行仿真 /// public async Task RunSimulation() { // 创建目标 var target = _targetFactory.CreateTarget(new TargetConfig { Id = "target_001", Position = new Vector3(1000, 0, 100), Velocity = new Vector3(-100, 0, 0), Signature = new IRSignature { Temperature = 350, // 开尔文 EmissivityFactor = 0.8f } }); // 创建导弹 var missile = _missileFactory.CreateMissile(new MissileConfig { Id = "missile_001", Position = new Vector3(0, 0, 0), MaxSpeed = 800, // 米/秒 MaxAcceleration = 30, // G MaxTurnRate = 20 // 度/秒 }); // 创建红外成像传感器 var sensor = _sensorFactory.CreateSensor(new IRSensorConfig { Id = "sensor_001", Resolution = new Vector2(640, 480), FieldOfView = 60, // 度 MinTemperature = 270, // 开尔文 MaxTemperature = 400 // 开尔文 }); // 配置仿真参数 var config = new SimulationConfig { TimeStep = 0.02f, // 仿真步长(秒) MaxSimulationTime = 60.0f, // 最大仿真时间(秒) EnvironmentConditions = new EnvironmentConfig { Temperature = 288, // 开尔文 Pressure = 101325, // 帕斯卡 Humidity = 0.5f // 相对湿度 } }; // 初始化仿真 await _simulationManager.Initialize(config); // 添加实体 _simulationManager.AddEntity(target); _simulationManager.AddEntity(missile); _simulationManager.AddEntity(sensor); // 启动仿真 await _simulationManager.StartSimulation(); // 等待仿真完成 while (_simulationManager.IsRunning) { await Task.Delay(100); } // 获取仿真结果 var results = _simulationManager.GetSimulationResults(); ProcessResults(results); } private void ProcessResults(SimulationResults results) { // 处理仿真结果 Console.WriteLine($"仿真完成时间: {results.CompletionTime}秒"); Console.WriteLine($"命中精度: {results.HitAccuracy}米"); Console.WriteLine($"导引头跟踪时间: {results.TrackingTime}秒"); } } ``` ### C++示例 ([IRMissileSimulation.cpp](IRMissileSimulation.cpp)) 这是一个使用C++/CLI的示例代码,展示了如何在C++项目中使用本库: - 如何创建C++/CLI包装层 - 如何配置导弹实体 - 如何设置仿真参数 - 如何运行仿真并获取结果 #### 源代码 ```cpp #include "ThreatSource.h" using namespace System; using namespace ThreatSource::Simulation; using namespace ThreatSource::Missile; using namespace ThreatSource::Sensor; using namespace ThreatSource::Target; /// /// C++/CLI包装类,用于在C++项目中使用仿真系统 /// public ref class SimulationWrapper { private: ISimulationManager^ _simulationManager; IMissileFactory^ _missileFactory; ITargetFactory^ _targetFactory; ISensorFactory^ _sensorFactory; public: SimulationWrapper() { _simulationManager = gcnew SimulationManager(); _missileFactory = gcnew MissileFactory(); _targetFactory = gcnew TargetFactory(); _sensorFactory = gcnew SensorFactory(); } void RunSimulation() { // 创建目标 auto target = _targetFactory->CreateTarget(gcnew TargetConfig { Id = "target_001", Position = Vector3(1000, 0, 100), Velocity = Vector3(-100, 0, 0), Signature = gcnew IRSignature { Temperature = 350, EmissivityFactor = 0.8f } }); // 创建导弹 auto missile = _missileFactory->CreateMissile(gcnew MissileConfig { Id = "missile_001", Position = Vector3(0, 0, 0), MaxSpeed = 800, MaxAcceleration = 30, MaxTurnRate = 20 }); // 创建传感器 auto sensor = _sensorFactory->CreateSensor(gcnew IRSensorConfig { Id = "sensor_001", Resolution = Vector2(640, 480), FieldOfView = 60, MinTemperature = 270, MaxTemperature = 400 }); // 配置仿真参数 auto config = gcnew SimulationConfig { TimeStep = 0.02f, MaxSimulationTime = 60.0f, EnvironmentConditions = gcnew EnvironmentConfig { Temperature = 288, Pressure = 101325, Humidity = 0.5f } }; // 初始化仿真 _simulationManager->Initialize(config)->Wait(); // 添加实体 _simulationManager->AddEntity(target); _simulationManager->AddEntity(missile); _simulationManager->AddEntity(sensor); // 启动仿真 _simulationManager->StartSimulation()->Wait(); // 等待仿真完成 while (_simulationManager->IsRunning) { System::Threading::Thread::Sleep(100); } // 获取仿真结果 auto results = _simulationManager->GetSimulationResults(); ProcessResults(results); } private: void ProcessResults(SimulationResults^ results) { Console::WriteLine("仿真完成时间: {0}秒", results->CompletionTime); Console::WriteLine("命中精度: {0}米", results->HitAccuracy); Console::WriteLine("导引头跟踪时间: {0}秒", results->TrackingTime); } }; // 在C++代码中使用 int main() { auto simulation = gcnew SimulationWrapper(); simulation->RunSimulation(); return 0; } ``` ## 使用说明 ### C#/.NET使用方式 1. 创建仿真适配器 ```csharp var adapter = new TestSimulationAdapter(); ``` 2. 配置导弹和目标 ```csharp var missile = new SimulationEntity { Id = "missile_001", Position = new Vector3(0, 0, 0), // ... 其他配置 }; ``` 3. 设置仿真参数 ```csharp var simConfig = new SimulationConfig { TimeStep = 0.02f, // 仿真步长(秒) MaxSimulationTime = 60.0f, // 最大仿真时间(秒) // ... 其他配置 }; ``` 4. 运行仿真 ```csharp await adapter.Initialize(simConfig); await adapter.StartSimulation(); ``` ### C++使用方式 1. 创建C++/CLI项目 - 在Visual Studio中创建新的C++/CLI项目 - 添加对 ThreatSource.dll 的引用 2. 创建包装类 ```cpp public ref class SimulationWrapper { private: TestSimulationAdapter^ adapter; public: SimulationWrapper() { adapter = gcnew TestSimulationAdapter(); } // ... 其他包装方法 }; ``` 3. 在C++代码中使用 ```cpp auto simulation = gcnew SimulationWrapper(); simulation->Initialize(); simulation->StartSimulation(); ``` ## 注意事项 1. 确保所有参数单位正确(米、秒、开尔文等) 2. 合理设置仿真时间步长,平衡精度和性能 3. 注意处理异步操作和事件回调 4. C++/CLI注意事项: - 仅支持Windows平台 - 需要正确配置项目的目标框架 - 注意托管和非托管资源的正确释放