修改末敏弹的减速阶段参数和开伞段的逻辑,修改末敏弹的发射速度和分离速度,增大末敏弹的视场角到3度
This commit is contained in:
parent
0dcdcdcfd6
commit
95efe158d6
@ -22,10 +22,10 @@ SelfDestructHeight = 0.0 # 自毁高度 (米)
|
||||
|
||||
[SubmunitionProperties] # 子弹药属性
|
||||
Type = "TerminalSensitiveSubmunition" # 属性中的类型
|
||||
MaxSpeed = 2000.0 # 最大速度 (米/秒)
|
||||
MaxSpeed = 3000.0 # 最大速度 (米/秒)
|
||||
MaxFlightTime = 60.0 # 最大飞行时间 (秒)
|
||||
MaxFlightDistance = 2000.0 # 最大飞行距离 (米)
|
||||
MaxAcceleration = 500.0 # 最大加速度 (米/秒^2)
|
||||
MaxAcceleration = 2000.0 # 最大加速度 (米/秒^2)
|
||||
ProportionalNavigationCoefficient = 4.0 # 比例导引系数
|
||||
LaunchAcceleration = 0.0 # 发射加速度 (米/秒^2)
|
||||
MaxEngineBurnTime = 0.0 # 最大发动机燃烧时间 (秒)
|
||||
@ -35,20 +35,21 @@ HitProbability = 0.9 # 命中概率
|
||||
SelfDestructHeight = 20.0 # 自毁高度 (米)
|
||||
|
||||
[SubmunitionConfig] # 子弹药配置
|
||||
SeparationSpeed = 600.0 # 分离速度 (米/秒)
|
||||
SeparationSpeed = 750.0 # 分离速度 (米/秒)
|
||||
SeparationHeight = 1000.0 # 分离高度 (米)
|
||||
SeparationDistance = 1000.0 # 分离距离 (米)
|
||||
SubmunitionSeparationAngle = 35.0 # 子弹药分离角度 (度)
|
||||
SeparationRange = 10.0 # 分离散布范围 (米)
|
||||
DecelerationAcceleration = 150.0 # 减速加速度 (米/秒^2)
|
||||
DecelerationEndSpeed = 200.0 # 减速结束速度 (米/秒)
|
||||
ParachuteDeploymentHeight = 400.0 # 开伞高度 (米)
|
||||
ParachuteDeceleration = 110.0 # 降落伞减速度 (米/秒^2)
|
||||
StableScanHeight = 200.0 # 稳定扫描高度 (米)
|
||||
DecelerationHeight = 400.0 # 减速高度 (米)
|
||||
DecelerationAcceleration = 1500.0 # 减速加速度 (米/秒^2)
|
||||
DecelerationEndSpeed = 50.0 # 减速结束速度 (米/秒)
|
||||
ParachuteDeploymentHeight = 200.0 # 开伞高度 (米)
|
||||
ParachuteDeceleration = 40.0 # 降落伞减速度 (米/秒^2)
|
||||
StableScanHeight = 173.2 # 稳定扫描高度 (米),斜距 200 米
|
||||
VerticalDeclineSpeed = 10.0 # 垂直下降速度 (米/秒)
|
||||
SpiralRotationSpeed = 1440.0 # 螺旋旋转速度 (度/秒)
|
||||
ScanAngle = 30.0 # 扫描角度 (度)
|
||||
TargetDetectionDistance = 150.0 # 目标探测距离 (米)
|
||||
TargetDetectionDistance = 130.0 # 目标探测距离 (米),斜距 150 米
|
||||
SelfDestructHeight = 20.0 # (子弹药)自毁高度 (米)
|
||||
AttackSpeed = 1000.0 # 攻击速度 (米/秒)
|
||||
TotalProcessingTime = 15.0 # 整体处理时间 (秒),用于目标位置预测
|
||||
@ -56,14 +57,14 @@ TotalProcessingTime = 15.0 # 整体处理时间 (秒),用于目
|
||||
[SubmunitionConfig.InfraredDetectorConfig] # 子弹药红外探测器配置
|
||||
MaxDetectionRange = 1000.0 # 最大探测距离 (米)
|
||||
Band = "Medium" # 工作波段 (例如: "Short", "Medium", "Long")
|
||||
FieldOfView = 2.0 # 视场角 (度)
|
||||
FieldOfView = 3.0 # 视场角 (度)
|
||||
DetectionRadiationIntensityThreshold = 50.0 # 探测辐射强度阈值 (瓦特/球面度)
|
||||
JammingResistanceThreshold = 1.0e-4 # 干扰抗性阈值 (瓦特)
|
||||
|
||||
[SubmunitionConfig.RadiometerConfig] # 子弹药辐射计配置
|
||||
MaxDetectionRange = 1000.0 # 最大探测距离 (米)
|
||||
Band = "Band8" # 工作波段 (例如: "Band3", "Band8", "Band35", "Band94")
|
||||
ScanFieldOfView = 2.0 # 扫描视场角 (度)
|
||||
ScanFieldOfView = 3.0 # 扫描视场角 (度)
|
||||
JammingResistanceThreshold = 1.0e-4 # 干扰抗性阈值 (瓦特)
|
||||
|
||||
[SubmunitionConfig.AltimeterConfig] # 子弹药高度计配置
|
||||
|
||||
@ -202,15 +202,6 @@ namespace ThreatSource.Missile
|
||||
/// </remarks>
|
||||
private void PerformSeparation()
|
||||
{
|
||||
// 获取母弹当前的方向向量
|
||||
Vector3D currentDirection = KState.Orientation.ToVector();
|
||||
|
||||
// 计算水平方向(保持母弹的水平方向分量)
|
||||
Vector3D horizontalDirection = new Vector3D(currentDirection.X, 0, currentDirection.Z).Normalize();
|
||||
|
||||
// 计算分离角度(弧度)
|
||||
double separationAngleRad = submunitionConfig.SubmunitionSeparationAngle * Math.PI / 180.0;
|
||||
|
||||
// 获取风速
|
||||
Vector3D windVec = Vector3D.Zero;
|
||||
var weather = SimulationManager.CurrentWeather;
|
||||
|
||||
@ -279,15 +279,27 @@ namespace ThreatSource.Missile
|
||||
/// <param name="deltaTime">时间步长,单位:秒</param>
|
||||
/// <remarks>
|
||||
/// 分离阶段处理:
|
||||
/// - 只表示分离动作,不进行任何物理计算
|
||||
/// - 分离阶段结束,进入减速阶段
|
||||
/// - 激活毫米波测高雷达
|
||||
/// - 检查高度计数据有效,且高度是否小于等于减速高度
|
||||
/// - 如果是,则进入减速阶段
|
||||
/// - 否则,继续惯性飞行
|
||||
/// </remarks>
|
||||
private void UpdateSeparationStage(double deltaTime)
|
||||
{
|
||||
// 分离阶段只表示分离行为,不进行任何物理计算
|
||||
if(!altimeter.IsActive)
|
||||
{
|
||||
// 激活毫米波测高雷达
|
||||
altimeter.Activate();
|
||||
altimeter.Update(deltaTime);
|
||||
}
|
||||
|
||||
// 分离阶段结束,进入减速阶段
|
||||
currentSubmunitionStage = SubmunitionStage.Deceleration;
|
||||
// 检查高度计数据有效,且高度是否小于等于减速高度
|
||||
AltimeterSensorData altimeterData = (AltimeterSensorData)altimeter.GetSensorData();
|
||||
if(altimeterData.IsValid && altimeterData.Altitude <= config.DecelerationHeight)
|
||||
{
|
||||
// 如果是,则进入减速阶段
|
||||
currentSubmunitionStage = SubmunitionStage.Deceleration;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -304,13 +316,6 @@ namespace ThreatSource.Missile
|
||||
/// </remarks>
|
||||
private void UpdateDecelerationStage(double deltaTime)
|
||||
{
|
||||
if(!altimeter.IsActive)
|
||||
{
|
||||
// 激活毫米波测高雷达
|
||||
altimeter.Activate();
|
||||
altimeter.Update(deltaTime);
|
||||
}
|
||||
|
||||
if (KState.Speed > config.DecelerationEndSpeed)
|
||||
{
|
||||
// 减速减旋,速度减小
|
||||
@ -324,7 +329,7 @@ namespace ThreatSource.Missile
|
||||
{
|
||||
// 如果是,则进入降落伞打开阶段
|
||||
currentSubmunitionStage = SubmunitionStage.ParachuteDeployment;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -342,12 +347,17 @@ namespace ThreatSource.Missile
|
||||
/// </remarks>
|
||||
private void UpdateParachuteDeploymentStage(double deltaTime)
|
||||
{
|
||||
// 如果速度大于降落伞减速速度,则降落伞减速
|
||||
if (KState.Speed > config.VerticalDeclineSpeed)
|
||||
// 如果垂直速度分量大于垂直下降速度,则降落伞减速
|
||||
if (Math.Abs(KState.Velocity.Y) > config.VerticalDeclineSpeed)
|
||||
{
|
||||
Vector3D deceleration = -KState.Velocity.Normalize() * config.ParachuteDeceleration;
|
||||
KState.Velocity += deceleration * deltaTime;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果垂直速度分量小于等于垂直下降速度,则改为匀速垂直下降
|
||||
KState.Velocity = new Vector3D(0, -config.VerticalDeclineSpeed, 0);
|
||||
}
|
||||
|
||||
AltimeterSensorData altimeterData = (AltimeterSensorData)altimeter.GetSensorData();
|
||||
// 检查高度计数据有效,且高度是否小于等于稳定扫描高度
|
||||
|
||||
@ -830,6 +830,16 @@ namespace ThreatSource.Simulation
|
||||
#endregion
|
||||
|
||||
#region 减速阶段参数
|
||||
|
||||
/// <summary>
|
||||
/// 减速阶段减速高度,单位:米
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 定义了减速阶段的减速高度
|
||||
/// 默认值为400米
|
||||
/// </remarks>
|
||||
public double DecelerationHeight { get; set; } = 400.0;
|
||||
|
||||
/// <summary>
|
||||
/// 减速阶段的减速加速度,单位:米/秒²
|
||||
/// </summary>
|
||||
|
||||
@ -323,7 +323,7 @@ iii. coeff_c = DeltaPos.MagnitudeSquared()
|
||||
|
||||
|
||||
|
||||
## 坦克、装甲车和直升机的RCS统计模型选择与其运动特性、结构复杂度及雷达观测条件密切相关,以下是具体分析:
|
||||
# 坦克、装甲车和直升机的RCS统计模型选择与其运动特性、结构复杂度及雷达观测条件密切相关,以下是具体分析:
|
||||
一、坦克与装甲车
|
||||
适用模型:Swerling I/III型或对数正态分布
|
||||
运动特性
|
||||
@ -361,3 +361,22 @@ Swerling II/IV、混合分布
|
||||
坦克的倾斜装甲可能引发极化敏感性,需结合交叉极化模型修正。直升机旋翼的谐振效应在低频段(L波段)可能增强RCS起伏幅度。
|
||||
通过结合目标运动特性与散射机理,可更精准地选择RCS统计模型,为雷达探测算法设计提供理论支撑。
|
||||
|
||||
# 末敏弹子弹各阶段切换参数
|
||||
子弹运动状态随机:10%,因为伞的影响
|
||||
|
||||
1. 分离阶段
|
||||
分离速度=母弹速度(1000m/s)
|
||||
2. 减速阶段
|
||||
减速高度:400 米
|
||||
减速时间:
|
||||
末端速度:30~50m/s
|
||||
3. 伞降阶段
|
||||
起始高度:
|
||||
减速时间:1秒
|
||||
末端速度:10m/s
|
||||
4. 稳态扫描
|
||||
起始高度:30 度角斜距 200 米
|
||||
下降速度:10m/s
|
||||
5. 攻击阶段
|
||||
起始高度:30 度角斜距 120 米
|
||||
攻击速度:2000~3000m/s
|
||||
@ -342,7 +342,7 @@ namespace ThreatSource.Tools.MissileSimulation
|
||||
{
|
||||
Position = new Vector3D(3000, 1, 20),
|
||||
Orientation = new Orientation(Math.PI/2, 0.0, 0.0),
|
||||
Speed = 700
|
||||
Speed = 950
|
||||
};
|
||||
|
||||
string missileId = "TSM_1";
|
||||
@ -490,156 +490,6 @@ namespace ThreatSource.Tools.MissileSimulation
|
||||
Console.WriteLine($"注册红外测角仪 {infraredTrackerId}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加各类型干扰器
|
||||
/// </summary>
|
||||
private void AddJammers()
|
||||
{
|
||||
// 添加激光干扰器 - 指向指示器
|
||||
var laserJammerParams = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(0, 0, 0),
|
||||
Orientation = CalculateOrientationToEntity(indicators["LD_1"]), // 朝向激光指示器
|
||||
Speed = 0.0
|
||||
};
|
||||
string laserJammerId = "LaserJammer_Designator";
|
||||
var laserJammer = _threatSourceFactory.CreateJammer(laserJammerId, "laser_blocking", laserJammerParams, "Tank_1");
|
||||
if (laserJammer is BaseJammer jammer4)
|
||||
{
|
||||
simulationManager.RegisterEntity(laserJammerId, laserJammer);
|
||||
jammers[laserJammerId] = jammer4;
|
||||
Console.WriteLine($"注册激光干扰器(指向指示器) {laserJammerId}");
|
||||
}
|
||||
|
||||
// 添加激光干扰器 - 指向导弹
|
||||
laserJammerParams = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(0, 0, 0),
|
||||
Orientation = CalculateOrientationToEntity(missiles["LSGM_1"]), // 朝向激光半主动导弹
|
||||
Speed = 0.0
|
||||
};
|
||||
laserJammerId = "LaserJammer_Missile";
|
||||
laserJammer = _threatSourceFactory.CreateJammer(laserJammerId, "laser_blocking", laserJammerParams, "Tank_1");
|
||||
if (laserJammer is BaseJammer jammer5)
|
||||
{
|
||||
simulationManager.RegisterEntity(laserJammerId, laserJammer);
|
||||
jammers[laserJammerId] = jammer5;
|
||||
Console.WriteLine($"注册激光干扰器(指向导弹) {laserJammerId}");
|
||||
}
|
||||
|
||||
// 添加红外干扰器 - 指向指示器
|
||||
var irJammerParams = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(0, 0, 0),
|
||||
Orientation = CalculateOrientationToEntity(indicators["IT_1"]), // 朝向红外指示器
|
||||
Speed = 0.0
|
||||
};
|
||||
string irJammerId = "InfraredJammer_Designator";
|
||||
var irJammer = _threatSourceFactory.CreateJammer(irJammerId, "infrared_blocking", irJammerParams, "Tank_1");
|
||||
if (irJammer is BaseJammer jammer6)
|
||||
{
|
||||
simulationManager.RegisterEntity(irJammerId, irJammer);
|
||||
jammers[irJammerId] = jammer6;
|
||||
Console.WriteLine($"注册红外干扰器(指向指示器) {irJammerId}");
|
||||
}
|
||||
|
||||
// 添加红外干扰器 - 指向导弹
|
||||
irJammerParams = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(0, 0, 0),
|
||||
Orientation = CalculateOrientationToEntity(missiles["ITGM_1"]), // 朝向红外成像导弹
|
||||
Speed = 0.0
|
||||
};
|
||||
irJammerId = "InfraredJammer_Missile";
|
||||
irJammer = _threatSourceFactory.CreateJammer(irJammerId, "infrared_blocking", irJammerParams, "Tank_1");
|
||||
if (irJammer is BaseJammer jammer7)
|
||||
{
|
||||
simulationManager.RegisterEntity(irJammerId, irJammer);
|
||||
jammers[irJammerId] = jammer7;
|
||||
Console.WriteLine($"注册红外干扰器(指向导弹) {irJammerId}");
|
||||
}
|
||||
|
||||
// 添加毫米波干扰器 - 指向导弹
|
||||
var mmwJammerParams = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(0, 0, 0),
|
||||
Orientation = CalculateOrientationToEntity(missiles["MMWG_1"]), // 朝向毫米波导弹
|
||||
Speed = 0.0
|
||||
};
|
||||
string mmwJammerId = "MillimeterWaveJammer_Missile";
|
||||
var mmwJammer = _threatSourceFactory.CreateJammer(mmwJammerId, "mmw_blocking", mmwJammerParams, "Tank_1");
|
||||
if (mmwJammer is BaseJammer jammer8)
|
||||
{
|
||||
simulationManager.RegisterEntity(mmwJammerId, mmwJammer);
|
||||
jammers[mmwJammerId] = jammer8;
|
||||
Console.WriteLine($"注册毫米波干扰器(指向导弹) {mmwJammerId}");
|
||||
}
|
||||
|
||||
// 添加激光干扰器 - 指向子弹药
|
||||
laserJammerParams = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(0, 0, 0),
|
||||
Orientation = new Orientation(0, Math.PI/2, 0), // 朝向垂直向上
|
||||
Speed = 0.0
|
||||
};
|
||||
laserJammerId = "LaserJammer_Submunition";
|
||||
laserJammer = _threatSourceFactory.CreateJammer(laserJammerId, "laser_top_blocking", laserJammerParams, "Tank_1");
|
||||
if (laserJammer is BaseJammer jammer9)
|
||||
{
|
||||
simulationManager.RegisterEntity(laserJammerId, laserJammer);
|
||||
jammers[laserJammerId] = jammer9;
|
||||
Console.WriteLine($"注册激光干扰器(垂直向上) {laserJammerId}");
|
||||
}
|
||||
|
||||
// 添加红外干扰器 - 指向子弹药
|
||||
irJammerParams = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(0, 0, 0),
|
||||
Orientation = new Orientation(0, Math.PI/2, 0), // 朝向垂直向上
|
||||
Speed = 0.0
|
||||
};
|
||||
irJammerId = "InfraredJammer_Submunition";
|
||||
irJammer = _threatSourceFactory.CreateJammer(irJammerId, "infrared_top_blocking", irJammerParams, "Tank_1");
|
||||
if (irJammer is BaseJammer jammer10)
|
||||
{
|
||||
simulationManager.RegisterEntity(irJammerId, irJammer);
|
||||
jammers[irJammerId] = jammer10;
|
||||
Console.WriteLine($"注册红外干扰器(垂直向上) {irJammerId}");
|
||||
}
|
||||
|
||||
// 添加毫米波干扰器 - 指向子弹药
|
||||
mmwJammerParams = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(0, 0, 0),
|
||||
Orientation = new Orientation(0, Math.PI/2, 0), // 朝向垂直向上
|
||||
Speed = 0.0
|
||||
};
|
||||
mmwJammerId = "MillimeterWaveJammer_Submunition";
|
||||
mmwJammer = _threatSourceFactory.CreateJammer(mmwJammerId, "mmw_top_blocking", mmwJammerParams, "Tank_1");
|
||||
if (mmwJammer is BaseJammer jammer11)
|
||||
{
|
||||
simulationManager.RegisterEntity(mmwJammerId, mmwJammer);
|
||||
jammers[mmwJammerId] = jammer11;
|
||||
Console.WriteLine($"注册毫米波干扰器(垂直向上) {mmwJammerId}");
|
||||
}
|
||||
|
||||
// 添加毫米波补偿干扰器 - 指向导弹
|
||||
mmwJammerParams = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(0, 0, 0),
|
||||
Orientation = new Orientation(0, Math.PI/2, 0), // 朝向垂直向上
|
||||
Speed = 0.0
|
||||
};
|
||||
string mmwCompensationJammerId = "MillimeterWaveCompensationJammer_Submunition";
|
||||
var mmwCompensationJammer = _threatSourceFactory.CreateJammer(mmwCompensationJammerId, "mmw_compensation", mmwJammerParams, "Tank_1");
|
||||
if (mmwCompensationJammer is BaseJammer jammer12)
|
||||
{
|
||||
simulationManager.RegisterEntity(mmwCompensationJammerId, mmwCompensationJammer);
|
||||
jammers[mmwCompensationJammerId] = jammer12;
|
||||
Console.WriteLine($"注册毫米波补偿干扰器(垂直向上) {mmwCompensationJammerId}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 计算朝向实体的方向
|
||||
/// </summary>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user