修改末敏弹的减速阶段参数和开伞段的逻辑,修改末敏弹的发射速度和分离速度,增大末敏弹的视场角到3度

This commit is contained in:
Tian jianyong 2025-05-30 09:10:30 +08:00
parent 0dcdcdcfd6
commit 95efe158d6
6 changed files with 68 additions and 187 deletions

View File

@ -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] # 子弹药高度计配置

View File

@ -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;

View File

@ -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();
// 检查高度计数据有效,且高度是否小于等于稳定扫描高度

View File

@ -830,6 +830,16 @@ namespace ThreatSource.Simulation
#endregion
#region
/// <summary>
/// 减速阶段减速高度,单位:米
/// </summary>
/// <remarks>
/// 定义了减速阶段的减速高度
/// 默认值为400米
/// </remarks>
public double DecelerationHeight { get; set; } = 400.0;
/// <summary>
/// 减速阶段的减速加速度,单位:米/秒²
/// </summary>

View File

@ -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

View File

@ -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>