CloudDispersal加SalvoRounds/Spacing, FireSchedule按间隔展开云团, 拦截成功
This commit is contained in:
parent
a35fd4b545
commit
98e16ea720
@ -105,26 +105,21 @@ namespace CounterDrone.Core.Algorithms
|
||||
var expansionTime = (float)Math.Pow((effectiveR - r0) / k, 2);
|
||||
var recommendedTiming = halfTime - expansionTime;
|
||||
|
||||
var cloudSalvo = new List<CloudDispersal>();
|
||||
for (int i = 0; i < roundsNeeded; i++)
|
||||
var bestCloud = new CloudDispersal
|
||||
{
|
||||
var offset = (i - (roundsNeeded - 1) / 2f) * spacing;
|
||||
cloudSalvo.Add(new CloudDispersal
|
||||
{
|
||||
AerosolType = (int)aerosolType,
|
||||
PositionX = mid.X + offset,
|
||||
PositionY = mid.Y,
|
||||
PositionZ = mid.Z,
|
||||
DisperseHeight = (float)target.TypicalAltitude,
|
||||
TriggerMode = (int)TriggerMode.Time,
|
||||
Duration = (int)maxDur,
|
||||
InitialScale = ammo.InitialVolume,
|
||||
ReleaseMode = (int)ReleaseMode.Single,
|
||||
Source = "Algorithm",
|
||||
PositionMode = (int)PositionMode.AlgorithmRecommended,
|
||||
RecommendedTiming = recommendedTiming,
|
||||
});
|
||||
}
|
||||
AerosolType = (int)aerosolType,
|
||||
PositionX = mid.X, PositionY = mid.Y, PositionZ = mid.Z,
|
||||
DisperseHeight = (float)target.TypicalAltitude,
|
||||
TriggerMode = (int)TriggerMode.Time,
|
||||
Duration = (int)maxDur,
|
||||
InitialScale = ammo.InitialVolume,
|
||||
ReleaseMode = (int)ReleaseMode.Single,
|
||||
Source = "Algorithm",
|
||||
PositionMode = (int)PositionMode.AlgorithmRecommended,
|
||||
RecommendedTiming = recommendedTiming,
|
||||
SalvoRounds = roundsNeeded,
|
||||
SalvoSpacing = spacing,
|
||||
};
|
||||
|
||||
// 平台部署:假设齐射(同时发射),每门炮打一发后冷却 5s
|
||||
// 需要 roundsNeeded 门炮同时发射
|
||||
@ -146,8 +141,7 @@ namespace CounterDrone.Core.Algorithms
|
||||
{
|
||||
RecommendedAerosolType = aerosolType,
|
||||
AerosolRationale = rationale,
|
||||
RecommendedCloud = cloudSalvo[0],
|
||||
CloudSalvo = cloudSalvo,
|
||||
RecommendedCloud = bestCloud,
|
||||
SalvoRounds = roundsNeeded,
|
||||
SalvoSpacing = spacing,
|
||||
Platforms = platforms,
|
||||
|
||||
@ -45,5 +45,10 @@ namespace CounterDrone.Core.Models
|
||||
public double? CriticalPosY { get; set; }
|
||||
public double? CriticalPosZ { get; set; }
|
||||
public double? CriticalTiming { get; set; }
|
||||
|
||||
/// <summary>齐射弹药数(推荐算法填充)</summary>
|
||||
public int SalvoRounds { get; set; }
|
||||
/// <summary>云团间隔(m)(推荐算法填充)</summary>
|
||||
public double SalvoSpacing { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -186,18 +186,16 @@ namespace CounterDrone.Unity
|
||||
var cloud = detail.Cloud;
|
||||
if (!cloud.RecommendedTiming.HasValue || cloud.RecommendedTiming <= 0) return schedule;
|
||||
|
||||
// 每个发射平台打一发,目标云团位置(平台已由推荐算法部署到最佳位置)
|
||||
var platforms = detail.Equipment.FindAll(e => e.EquipmentRole == (int)EquipmentRole.LaunchPlatform);
|
||||
if (platforms.Count == 0) return schedule;
|
||||
|
||||
var releaseAlt = (float)cloud.DisperseHeight;
|
||||
if (releaseAlt < 10) releaseAlt = 300f;
|
||||
// 齐射展开
|
||||
var spacing = (float)cloud.SalvoSpacing;
|
||||
if (spacing <= 0) spacing = 50f;
|
||||
|
||||
for (int i = 0; i < platforms.Count; i++)
|
||||
{
|
||||
var p = platforms[i];
|
||||
var mv = (float)(p.MuzzleVelocity ?? 800);
|
||||
var tx = (float)cloud.PositionX; var ty = (float)cloud.PositionY; var tz = (float)cloud.PositionZ;
|
||||
var offset = (i - (platforms.Count - 1) / 2f) * spacing;
|
||||
var tx = (float)cloud.PositionX + offset; var ty = (float)cloud.PositionY; var tz = (float)cloud.PositionZ;
|
||||
var dx = tx - (float)p.PositionX; var dz = tz - (float)p.PositionZ;
|
||||
var dist = Mathf.Sqrt(dx * dx + dz * dz);
|
||||
var angle = Kinematics.CalculateLaunchAngle(dist, mv, releaseAlt);
|
||||
|
||||
@ -84,7 +84,9 @@ namespace CounterDrone.Core.Tests
|
||||
.ToList();
|
||||
if (platforms.Count == 0) return schedule;
|
||||
|
||||
// 每个部署平台打一发(平台数量由推荐算法确定)
|
||||
// 齐射展开:按推荐间隔沿航路排列云团位置
|
||||
var spacing = (float)cloud.SalvoSpacing;
|
||||
if (spacing <= 0) spacing = 50f;
|
||||
var releaseAlt = (float)cloud.DisperseHeight;
|
||||
if (releaseAlt < 10) releaseAlt = 300f;
|
||||
|
||||
@ -92,7 +94,8 @@ namespace CounterDrone.Core.Tests
|
||||
{
|
||||
var p = platforms[i];
|
||||
var mv = (float)(p.MuzzleVelocity ?? 800);
|
||||
var tx = (float)cloud.PositionX; var ty = (float)cloud.PositionY; var tz = (float)cloud.PositionZ;
|
||||
var offset = (i - (platforms.Count - 1) / 2f) * spacing;
|
||||
var tx = (float)cloud.PositionX + offset; var ty = (float)cloud.PositionY; var tz = (float)cloud.PositionZ;
|
||||
var dx = tx - (float)p.PositionX; var dz = tz - (float)p.PositionZ;
|
||||
var dist = (float)Math.Sqrt(dx * dx + dz * dz);
|
||||
var angle = Kinematics.CalculateLaunchAngle(dist, mv, releaseAlt);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user