ThreatSourceLibaray/docs/examples/Simulation
2024-12-31 13:05:26 +08:00
..
IRMissileSimulation.cpp 创建项目,添加文档 2024-12-30 15:51:19 +08:00
IRMissileSimulation.cs 创建项目,添加文档 2024-12-30 15:51:19 +08:00
README.md 增加 pdf 文档 2024-12-31 13:05:26 +08:00

导弹仿真示例

本目录包含了使用仿真系统进行导弹仿真的示例代码。这些示例展示了如何配置和运行不同类型的导弹仿真。

关于本库

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)

红外成像制导导弹仿真示例,展示了:

  • 如何创建和配置导弹实体
  • 如何设置红外成像制导系统
  • 如何配置仿真环境和参数
  • 如何运行仿真并获取结果

源代码

using ThreatSource.Simulation;
using ThreatSource.Missile;
using ThreatSource.Sensor;
using ThreatSource.Target;

/// <summary>
/// 红外成像制导导弹仿真示例
/// </summary>
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();
    }

    /// <summary>
    /// 运行仿真
    /// </summary>
    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)

这是一个使用C++/CLI的示例代码展示了如何在C++项目中使用本库:

  • 如何创建C++/CLI包装层
  • 如何配置导弹实体
  • 如何设置仿真参数
  • 如何运行仿真并获取结果

源代码

#include "ThreatSource.h"
using namespace System;
using namespace ThreatSource::Simulation;
using namespace ThreatSource::Missile;
using namespace ThreatSource::Sensor;
using namespace ThreatSource::Target;

/// <summary>
/// C++/CLI包装类用于在C++项目中使用仿真系统
/// </summary>
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. 创建仿真适配器

    var adapter = new TestSimulationAdapter();
    
  2. 配置导弹和目标

    var missile = new SimulationEntity
    {
        Id = "missile_001",
        Position = new Vector3(0, 0, 0),
        // ... 其他配置
    };
    
  3. 设置仿真参数

    var simConfig = new SimulationConfig
    {
        TimeStep = 0.02f,  // 仿真步长(秒)
        MaxSimulationTime = 60.0f,  // 最大仿真时间(秒)
        // ... 其他配置
    };
    
  4. 运行仿真

    await adapter.Initialize(simConfig);
    await adapter.StartSimulation();
    

C++使用方式

  1. 创建C++/CLI项目

    • 在Visual Studio中创建新的C++/CLI项目
    • 添加对 ThreatSource.dll 的引用
  2. 创建包装类

    public ref class SimulationWrapper
    {
    private:
        TestSimulationAdapter^ adapter;
    
    public:
        SimulationWrapper()
        {
            adapter = gcnew TestSimulationAdapter();
        }
    
        // ... 其他包装方法
    };
    
  3. 在C++代码中使用

    auto simulation = gcnew SimulationWrapper();
    simulation->Initialize();
    simulation->StartSimulation();
    

注意事项

  1. 确保所有参数单位正确(米、秒、开尔文等)
  2. 合理设置仿真时间步长,平衡精度和性能
  3. 注意处理异步操作和事件回调
  4. C++/CLI注意事项
    • 仅支持Windows平台
    • 需要正确配置项目的目标框架
    • 注意托管和非托管资源的正确释放