using System; using ActiveProtect.SimulationEnvironment; namespace ActiveProtect.Models { /// /// 定义传感器的基本接口 /// public interface ISensor { /// /// 获取或设置传感器是否处于激活状态 /// bool IsActive { get; set; } /// /// 激活传感器 /// void Activate(); /// /// 停用传感器 /// void Deactivate(); /// /// 更新传感器状态 /// /// 自上次更新以来的时间间隔 void Update(double deltaTime); /// /// 获取传感器数据 /// /// 传感器采集的数据 SensorData GetSensorData(); } /// /// 传感器的抽象基类,实现了ISensor接口的基本功能 /// public abstract class Sensor : ISensor { /// /// 获取或设置传感器是否处于激活状态 /// public bool IsActive { get; set; } /// /// 传感器的位置 /// protected Vector3D Position { get; set; } /// /// 传感器的朝向 /// protected Orientation Orientation { get; set; } /// /// 构造函数 /// /// 传感器的初始位置 /// 传感器的初始朝向 protected Sensor(Vector3D position, Orientation orientation) { Position = position; Orientation = orientation; IsActive = false; } /// /// 激活传感器 /// public virtual void Activate() { IsActive = true; } /// /// 停用传感器 /// public virtual void Deactivate() { IsActive = false; } /// /// 更新传感器状态(需要在子类中实现) /// /// 自上次更新以来的时间间隔 public abstract void Update(double deltaTime); /// /// 获取传感器数据(需要在子类中实现) /// /// 传感器采集的数据 public abstract SensorData GetSensorData(); } /// /// 红外探测器类 /// public class InfraredDetector : Sensor { /// /// 探测范围 /// public double DetectionRange { get; set; } /// /// 视场角 /// public double FieldOfView { get; set; } /// /// 构造函数 /// /// 探测器的位置 /// 探测器的朝向 /// 探测范围 /// 视场角 public InfraredDetector(Vector3D position, Orientation orientation, double detectionRange, double fieldOfView) : base(position, orientation) { DetectionRange = detectionRange; FieldOfView = fieldOfView; } /// /// 更新红外探测器的状态 /// /// 自上次更新以来的时间间隔 public override void Update(double deltaTime) { // 实现红外探测器的更新逻辑 } /// /// 获取红外探测器的数据 /// /// 红外探测器采集的数据 public override SensorData GetSensorData() { // 返回红外探测器的数据 return new InfraredSensorData(); } } /// /// 毫米波辐射计类 /// public class MillimeterWaveRadiometer : Sensor { /// /// 工作频率 /// public double Frequency { get; set; } /// /// 灵敏度 /// public double Sensitivity { get; set; } /// /// 构造函数 /// /// 辐射计的位置 /// 辐射计的朝向 /// 工作频率 /// 灵敏度 public MillimeterWaveRadiometer(Vector3D position, Orientation orientation, double frequency, double sensitivity) : base(position, orientation) { Frequency = frequency; Sensitivity = sensitivity; } /// /// 更新毫米波辐射计的状态 /// /// 自上次更新以来的时间间隔 public override void Update(double deltaTime) { // 实现毫米波辐射计的更新逻辑 } /// /// 获取毫米波辐射计的数据 /// /// 毫米波辐射计采集的数据 public override SensorData GetSensorData() { // 返回毫米波辐射计的数据 return new RadiometerSensorData(); } } /// /// 毫米波测高雷达类 /// public class MillimeterWaveAltimeter : Sensor { /// /// 最大测量高度 /// public double MaxAltitude { get; set; } /// /// 测量精度 /// public double Accuracy { get; set; } /// /// 构造函数 /// /// 测高雷达的位置 /// 测高雷达的朝向 /// 最大测量高度 /// 测量精度 public MillimeterWaveAltimeter(Vector3D position, Orientation orientation, double maxAltitude, double accuracy) : base(position, orientation) { MaxAltitude = maxAltitude; Accuracy = accuracy; } /// /// 更新毫米波测高雷达的状态 /// /// 自上次更新以来的时间间隔 public override void Update(double deltaTime) { // 实现毫米波测高雷达的更新逻辑 } /// /// 获取毫米波测高雷达的数据 /// /// 毫米波测高雷达采集的数据 public override SensorData GetSensorData() { // 返回毫米波测高雷达的数据 return new AltimeterSensorData(); } } /// /// 激光测距仪类 /// public class LaserRangefinder : Sensor { /// /// 最大测量距离 /// public double MaxRange { get; set; } /// /// 脉冲频率 /// public double PulseRate { get; set; } /// /// 构造函数 /// /// 测距仪的位置 /// 测距仪的朝向 /// 最大测量距离 /// 脉冲频率 public LaserRangefinder(Vector3D position, Orientation orientation, double maxRange, double pulseRate) : base(position, orientation) { MaxRange = maxRange; PulseRate = pulseRate; } /// /// 更新激光测距仪的状态 /// /// 自上次更新以来的时间间隔 public override void Update(double deltaTime) { // 实现激光测距仪的更新逻辑 } /// /// 获取激光测距仪的数据 /// /// 激光测距仪采集的数据 public override SensorData GetSensorData() { // 返回激光测距仪的数据 return new RangefinderSensorData(); } } /// /// 传感器数据的抽象基类 /// public abstract class SensorData { /// /// 数据采集的时间戳 /// public DateTime Timestamp { get; set; } } /// /// 红外传感器数据类 /// public class InfraredSensorData : SensorData { /// /// 探测到的温度 /// public double Temperature { get; set; } /// /// 目标方向(如果检测到目标) /// public Vector3D? TargetDirection { get; set; } } /// /// 辐射计传感器数据类 /// public class RadiometerSensorData : SensorData { /// /// 探测到的辐射强度 /// public double RadiationIntensity { get; set; } } /// /// 测高仪传感器数据类 /// public class AltimeterSensorData : SensorData { /// /// 测量的高度 /// public double Altitude { get; set; } } /// /// 测距仪传感器数据类 /// public class RangefinderSensorData : SensorData { /// /// 测量的距离 /// public double Distance { get; set; } } }