- 修改了版本号格式(0.2.18 -> 1.1.18)
- 修改了日志输出格式 - 飞行全程增加重力加速度 - 完善发射段的推力加速度计算 - 修改各导弹配置文件的初始发射速度、发动机燃烧时间 - 修改集成测试中导弹的发射距离、发射高度、发射角度
This commit is contained in:
parent
e1d2ea4eac
commit
bece0866b3
@ -16,6 +16,13 @@
|
||||
- 多种发射弹道模式:低平弹道、高抛弹道、俯冲弹道
|
||||
- 双模、多模制导
|
||||
|
||||
## [1.1.18] - 2025-05-14
|
||||
- 修改了版本号格式(0.2.18 -> 1.1.18)
|
||||
- 修改了日志输出格式
|
||||
- 飞行全程增加重力加速度
|
||||
- 完善发射段的推力加速度计算
|
||||
- 修改各导弹配置文件的初始发射速度、发动机燃烧时间
|
||||
- 修改集成测试中导弹的发射距离、发射高度、发射角度
|
||||
|
||||
## [0.2.17] - 2025-05-11
|
||||
- Orientation 坐标系的调整(前向方向从X轴改为Z轴)
|
||||
|
||||
@ -4,10 +4,10 @@
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<Version>1.0.0</Version>
|
||||
<Version>1.1.0</Version>
|
||||
<Product>ThreatSource Library</Product>
|
||||
<Description>A comprehensive library for missile simulation and threat source modeling.</Description>
|
||||
<Copyright>Copyright © 2024</Copyright>
|
||||
<Copyright>Copyright © 2025</Copyright>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
|
||||
</PropertyGroup>
|
||||
|
||||
@ -11,9 +11,9 @@ MaxSpeed = 300.0 # 最大速度 (米/秒)
|
||||
MaxFlightTime = 60.0 # 最大飞行时间 (秒)
|
||||
MaxFlightDistance = 5000.0 # 最大飞行距离 (米)
|
||||
MaxAcceleration = 100.0 # 最大加速度 (米/秒^2)
|
||||
ProportionalNavigationCoefficient = 3.0 # 比例导引系数
|
||||
ProportionalNavigationCoefficient = 4.0 # 比例导引系数
|
||||
LaunchAcceleration = 100.0 # 发射加速度 (米/秒^2)
|
||||
MaxEngineBurnTime = 0.1 # 最大发动机燃烧时间 (秒)
|
||||
MaxEngineBurnTime = 3.0 # 最大发动机燃烧时间 (秒)
|
||||
CruiseTime = 5.0 # 巡航时间 (秒)
|
||||
Mass = 23.5 # 质量 (千克)
|
||||
ExplosionRadius = 5.0 # 爆炸半径 (米)
|
||||
|
||||
@ -13,7 +13,7 @@ MaxFlightDistance = 5000.0
|
||||
MaxAcceleration = 100.0
|
||||
ProportionalNavigationCoefficient = 3.0
|
||||
LaunchAcceleration = 100.0
|
||||
MaxEngineBurnTime = 0.1
|
||||
MaxEngineBurnTime = 2.5
|
||||
CruiseTime = 5.0
|
||||
Mass = 25.0
|
||||
ExplosionRadius = 5.5
|
||||
|
||||
@ -13,7 +13,7 @@ MaxFlightDistance = 5000.0 # 最大飞行距离 (米)
|
||||
MaxAcceleration = 100.0 # 最大加速度 (米/秒^2)
|
||||
ProportionalNavigationCoefficient = 3.0 # 比例导引系数
|
||||
LaunchAcceleration = 100.0 # 发射加速度 (米/秒^2)
|
||||
MaxEngineBurnTime = 0.1 # 最大发动机燃烧时间 (秒)
|
||||
MaxEngineBurnTime = 3.0 # 最大发动机燃烧时间 (秒)
|
||||
CruiseTime = 5.0 # 巡航时间 (秒)
|
||||
Mass = 24.5 # 质量 (千克)
|
||||
ExplosionRadius = 5.0 # 爆炸半径 (米)
|
||||
@ -33,8 +33,8 @@ DetectorDiameter = 0.03 # 探测器直径 (米)
|
||||
ControlFieldDiameter = 20.0 # 控制视场直径 (米, 通常指在某一距离上的光斑直径)
|
||||
ProportionalGain = 30.0 # 比例增益
|
||||
IntegralGain = 0.05 # 积分增益
|
||||
DerivativeGain = 5.0 # 微分增益
|
||||
NonlinearGain = 0.5 # 非线性增益
|
||||
DerivativeGain = 10.0 # 微分增益
|
||||
NonlinearGain = 0.3 # 非线性增益
|
||||
MaxGuidanceAcceleration = 50.0 # 最大制导加速度 (米/秒^2)
|
||||
LowPassFilterCoefficient = 0.2 # 低通滤波器系数
|
||||
Wavelength = 1.06 # 工作波长 (微米)
|
||||
|
||||
@ -10,7 +10,7 @@ En = "Laser Semi-Active Guidance Missile-001"
|
||||
Type = "LaserSemiActiveGuidance" # properties内部的类型标识符
|
||||
MaxSpeed = 800.0 # 最大速度 (m/s)
|
||||
MaxFlightTime = 60.0 # 最大飞行时间 (秒)
|
||||
MaxFlightDistance = 4000.0 # 最大飞行距离 (米)
|
||||
MaxFlightDistance = 20000.0 # 最大飞行距离 (米)
|
||||
MaxAcceleration = 50.0 # 最大横向加速度 (m/s^2)
|
||||
ProportionalNavigationCoefficient = 2.0 # 比例导引系数
|
||||
LaunchAcceleration = 100.0 # 初始发射加速度 (m/s^2)
|
||||
|
||||
@ -13,7 +13,7 @@ MaxFlightDistance = 8000.0 # 最大飞行距离 (米)
|
||||
MaxAcceleration = 100.0 # 最大加速度 (米/秒^2)
|
||||
ProportionalNavigationCoefficient = 3.0 # 比例导引系数
|
||||
LaunchAcceleration = 100.0 # 发射加速度 (米/秒^2)
|
||||
MaxEngineBurnTime = 0.1 # 最大发动机燃烧时间 (秒)
|
||||
MaxEngineBurnTime = 2.5 # 最大发动机燃烧时间 (秒)
|
||||
CruiseTime = 4.0 # 巡航时间 (秒)
|
||||
Mass = 28.0 # 质量 (千克)
|
||||
ExplosionRadius = 5.0 # 爆炸半径 (米)
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
"armorThickness": 800.0,
|
||||
"radarCrossSection": 15.0,
|
||||
"infraredRadiationIntensity": 250.0,
|
||||
"ultravioletRadiationIntensity": 15.0,
|
||||
"ultravioletRadiationIntensity": 15.0,
|
||||
"millimeterWaveRadiationIntensity": 10.0,
|
||||
"millimeterWaveRadiationTemperature": 150.0,
|
||||
"laserReflectivity": 0.3,
|
||||
|
||||
@ -158,6 +158,7 @@ namespace ThreatSource.Indicator
|
||||
return;
|
||||
}
|
||||
currentTargetPosition = targetElement.KState.Position;
|
||||
_lastKnownTargetPosition = currentTargetPosition; // 记录最后已知的目标位置
|
||||
}
|
||||
|
||||
IsTracking = true;
|
||||
|
||||
@ -139,6 +139,7 @@ namespace ThreatSource.Indicator
|
||||
{
|
||||
LaserDirection = newDirection;
|
||||
Debug.WriteLine($"激光驾束仪 {Id} 更新激光指向: {LaserDirection}");
|
||||
_lastKnownTargetPosition = targetPosition; // 记录最后已知的目标位置
|
||||
PublishLaserBeamEvent();
|
||||
}
|
||||
}
|
||||
|
||||
@ -99,6 +99,11 @@ namespace ThreatSource.Missile
|
||||
/// </remarks>
|
||||
protected Vector3D ThrustAcceleration { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 重力加速度(北京标准值)
|
||||
/// </summary>
|
||||
private static readonly Vector3D GravityAcceleration = new Vector3D(0, -9.8015, 0);
|
||||
|
||||
/// <summary>
|
||||
/// 获取导弹的固定配置参数
|
||||
/// </summary>
|
||||
@ -134,12 +139,16 @@ namespace ThreatSource.Missile
|
||||
Properties = properties;
|
||||
|
||||
// 初始化状态
|
||||
EngineBurnTime = 0;
|
||||
FlightTime = 0;
|
||||
FlightDistance = 0;
|
||||
IsActive = false;
|
||||
IsGuidance = false;
|
||||
GuidanceAcceleration = Vector3D.Zero;
|
||||
ThrustAcceleration = Vector3D.Zero;
|
||||
|
||||
// 计算初始推力加速度
|
||||
Vector3D launchDirection = kinematicState.Orientation.ToVector().Normalize();
|
||||
ThrustAcceleration = launchDirection * properties.LaunchAcceleration;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -179,6 +188,21 @@ namespace ThreatSource.Missile
|
||||
/// </remarks>
|
||||
protected virtual void UpdateMotionState(double deltaTime)
|
||||
{
|
||||
// 检查发动机是否仍在提供推力
|
||||
if (ThrustAcceleration != Vector3D.Zero)
|
||||
{
|
||||
EngineBurnTime += deltaTime; // 累加燃烧时间
|
||||
|
||||
if (EngineBurnTime >= Properties.MaxEngineBurnTime || KState.Speed >= Properties.MaxSpeed)
|
||||
{
|
||||
string reason = EngineBurnTime >= Properties.MaxEngineBurnTime ?
|
||||
$"达到最大燃烧时间({Properties.MaxEngineBurnTime}s)" :
|
||||
$"达到最大速度({KState.Speed:F2}m/s >= {Properties.MaxSpeed}m/s)";
|
||||
Debug.WriteLine($"导弹 {Id}: 发动机推力已于飞行时间 {FlightTime:F2}s 关闭。原因: {reason}");
|
||||
ThrustAcceleration = Vector3D.Zero; // 关闭推力
|
||||
}
|
||||
}
|
||||
|
||||
// 计算包含风影响的合加速度
|
||||
Vector3D acceleration = CalculateAcceleration(KState.Velocity);
|
||||
|
||||
@ -216,7 +240,7 @@ namespace ThreatSource.Missile
|
||||
/// 计算过程:
|
||||
/// - 获取当前风速向量
|
||||
/// - 计算空气阻力加速度(已考虑风)
|
||||
/// - 合成总加速度(制导加速度 + 推力加速度 + 空气阻力加速度)
|
||||
/// - 合成总加速度(制导加速度 + 推力加速度 + 空气阻力加速度 + 重力加速度)
|
||||
/// - 限制合加速度不超过最大值
|
||||
/// </remarks>
|
||||
private Vector3D CalculateAcceleration(Vector3D velocity)
|
||||
@ -227,11 +251,11 @@ namespace ThreatSource.Missile
|
||||
// 计算空气阻力加速度(考虑风的影响)
|
||||
Vector3D dragAcceleration = CalculateDragAcceleration(velocity, windVector);
|
||||
|
||||
// 合成总加速度(制导加速度 + 推力加速度 + 空气阻力加速度)
|
||||
Vector3D totalAcceleration = GuidanceAcceleration + ThrustAcceleration + dragAcceleration;
|
||||
// 合成总加速度(制导加速度 + 推力加速度 + 空气阻力加速度 + 重力加速度)
|
||||
Vector3D totalAcceleration = GuidanceAcceleration + ThrustAcceleration + dragAcceleration + GravityAcceleration;
|
||||
|
||||
Debug.WriteLine($"导弹 {Id} 的加速度: {totalAcceleration}, 制导加速度: {GuidanceAcceleration}, " +
|
||||
$"推力加速度: {ThrustAcceleration}, 空气阻力加速度(含风影响): {dragAcceleration}");
|
||||
Debug.WriteLine($"导弹 {Id} 的加速度: {totalAcceleration}, 制导: {GuidanceAcceleration}, " +
|
||||
$"推力: {ThrustAcceleration}, 空阻(含风): {dragAcceleration}, 重力: {GravityAcceleration}");
|
||||
|
||||
if (totalAcceleration.Magnitude() > Properties.MaxAcceleration)
|
||||
{
|
||||
|
||||
@ -331,4 +331,87 @@
|
||||
2. 坦克速度 0.5米/秒,仿真运行 29.7 秒,命中
|
||||
3. 坦克速度 1米/秒,仿真运行 38 秒,自毁
|
||||
|
||||
## 激光驾束导弹实验记录(v1.1.18)
|
||||
|
||||
时间:2025-05-14 10:00:00
|
||||
版本:v1.1.18
|
||||
|
||||
### 运行过程
|
||||
导弹最大制导加速度, 50 时出现失控,将其增加到 100,击中目标(最大制导加速度为 77)
|
||||
|
||||
### 实验结论
|
||||
1. 导弹最大制导加速度,50 不够,需要将其增加到 100
|
||||
|
||||
## 激光半主动导弹实验记录(v1.1.18)
|
||||
|
||||
时间:2025-05-14 10:00:00
|
||||
版本:v1.1.18
|
||||
|
||||
### 运行过程
|
||||
调整发射角度,使其模仿真实环境的发射角度
|
||||
距离 10000米,发射角度 30度,导弹速度 500米/秒,导弹无法锁定,飞出范围。
|
||||
距离 10000米,发射角度 15度,导弹速度 500米/秒,导弹锁定目标,击中目标。
|
||||
距离 10000米,发射角度 10度,导弹速度 500米/秒,导弹锁定目标,击中目标。
|
||||
距离 10000米,发射角度 10度,导弹速度 600米/秒,导弹锁定目标,击中目标。
|
||||
上述锁定距离在 2300 米左右。
|
||||
|
||||
### 实验结论
|
||||
1. 导弹在无制导阶段,做抛物线运动,需要调整发射距离、速度和角度,使得导弹在制导阶段锁定目标。
|
||||
2. 如果要调整锁定距离,可以调整导弹导引头锁定阈值,实验是 1e-7。
|
||||
|
||||
## 红外指令制导导弹实验记录(v1.1.18)
|
||||
|
||||
时间:2025-05-14 10:00:00
|
||||
版本:v1.1.18
|
||||
|
||||
### 运行过程
|
||||
发射高度 1米,发射角度 0.01,导弹很快落地(因为加了重力)
|
||||
修改引导系数从 3 到 4,发射角度改到 0.2,导弹最低高度大于 0
|
||||
修改最大发动机助推时间从 0.1 到 3,发射角度改为 0.15,最大高度 30 米,最低高度大于 0,击中目标
|
||||
|
||||
### 实验结论
|
||||
1. 因为重力影响,原有的发射速度
|
||||
|
||||
|
||||
## 激光驾束导弹实验记录(v1.1.18)
|
||||
|
||||
时间:2025-05-14 10:00:00
|
||||
版本:v1.1.18
|
||||
|
||||
### 发射参数
|
||||
- 发射高度:1米
|
||||
- 发射角度:0.1
|
||||
- 导弹初速度:10米/秒
|
||||
- 加速时间:3秒
|
||||
- 导弹最大制导加速度:100 m/s²
|
||||
|
||||
### 原有的参数,效果不佳,最低高度在 0 以下。
|
||||
- 比例系数(Kp):30,用于控制系统对误差的敏感度和响应速度
|
||||
- 积分系数(Ki):0.05,用于消除长期误差
|
||||
- 微分系数(Kd):5,用于减少超调量,提高系统稳定性
|
||||
- 非线性增益系数(Kc):0.5,用于控制偏移量修正
|
||||
- 最大加速度限制:50 m/s²
|
||||
- 低通滤波系数(alpha):0.2
|
||||
|
||||
### 调整后的参数,最低高度在 0.6 米以上
|
||||
- 微分系数(Kd):10,用于减少超调量,提高系统稳定性
|
||||
- 非线性增益系数(Kc):0.3,用于控制偏移量修正
|
||||
|
||||
|
||||
## 红外制导导弹和毫米波制导导弹实验记录(v1.1.18)
|
||||
|
||||
时间:2025-05-14 10:00:00
|
||||
版本:v1.1.18
|
||||
|
||||
### 导弹合理发射参数
|
||||
- 发射高度:1米
|
||||
- 发射角度:0.2
|
||||
- 导弹初速度:10米/秒
|
||||
- 加速时间:2.5秒
|
||||
- 导弹最大制导加速度:100 m/s²
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -34,7 +34,7 @@ namespace ThreatSource.Tools.MissileSimulation
|
||||
private readonly Dictionary<string, SimulationElement> indicators;
|
||||
private readonly Dictionary<string, BaseJammer> jammers;
|
||||
private readonly Dictionary<string, bool> missileActiveStatus;
|
||||
private readonly double timeStep = 0.005; // 时间步长,单位:秒
|
||||
public double TimeStep { get; set; } = 0.02; // 时间步长,单位:秒,默认为低精度
|
||||
|
||||
// 导弹-干扰映射表
|
||||
private Dictionary<string, List<(JammingType Type, string DisplayName, string JammerId, string Mode, string Target)>> missileJammingMap;
|
||||
@ -318,9 +318,9 @@ namespace ThreatSource.Tools.MissileSimulation
|
||||
{
|
||||
var motionParameters = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(2000, 10, 10),
|
||||
Orientation = new Orientation(Math.PI/2, -0.01, 0),
|
||||
Speed = 700
|
||||
Position = new Vector3D(10000, 10, 10),
|
||||
Orientation = new Orientation(Math.PI/2, Math.PI/12, 0),
|
||||
Speed = 500
|
||||
};
|
||||
string missileId = "LSGM_1";
|
||||
var missile = _threatSourceFactory.CreateMissile(missileId, "lsgm_001", "Tank_1", motionParameters);
|
||||
@ -336,9 +336,9 @@ namespace ThreatSource.Tools.MissileSimulation
|
||||
{
|
||||
var motionParameters = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(2000, 10, 10),
|
||||
Orientation = new Orientation(Math.PI/2, -0.01, 0.0),
|
||||
Speed = 300
|
||||
Position = new Vector3D(2000, 1, 10),
|
||||
Orientation = new Orientation(Math.PI/2, 0.1, 0.0),
|
||||
Speed = 10
|
||||
};
|
||||
string missileId = "LBRM_1";
|
||||
var missile = _threatSourceFactory.CreateMissile(missileId, "hj10", "Tank_1", motionParameters);
|
||||
@ -375,8 +375,8 @@ namespace ThreatSource.Tools.MissileSimulation
|
||||
var motionParameters = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(2000, 1, 20),
|
||||
Orientation = new Orientation(Math.PI/2, 0.01, 0),
|
||||
Speed = 300
|
||||
Orientation = new Orientation(Math.PI/2, 0.15, 0),
|
||||
Speed = 10
|
||||
};
|
||||
|
||||
string missileId = "ICGM_1";
|
||||
@ -393,9 +393,9 @@ namespace ThreatSource.Tools.MissileSimulation
|
||||
{
|
||||
var motionParameters = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(2000, 10, 0),
|
||||
Orientation = new Orientation(Math.PI/2, -0.001, 0),
|
||||
Speed = 300
|
||||
Position = new Vector3D(2000, 1, 0),
|
||||
Orientation = new Orientation(Math.PI/2, 0.2, 0),
|
||||
Speed = 10
|
||||
};
|
||||
string missileId = "ITGM_1";
|
||||
var missile = _threatSourceFactory.CreateMissile(missileId, "itg_001", "Tank_1", motionParameters);
|
||||
@ -412,8 +412,8 @@ namespace ThreatSource.Tools.MissileSimulation
|
||||
var motionParameters = new KinematicState
|
||||
{
|
||||
Position = new Vector3D(2000, 1, 20),
|
||||
Orientation = new Orientation(Math.PI/2, 0.01, 0),
|
||||
Speed = 300
|
||||
Orientation = new Orientation(Math.PI/2, 0.2, 0),
|
||||
Speed = 10
|
||||
};
|
||||
string missileId = "MMWG_1";
|
||||
var missile = _threatSourceFactory.CreateMissile(missileId, "mmw_001", "Tank_1", motionParameters);
|
||||
@ -1047,12 +1047,12 @@ namespace ThreatSource.Tools.MissileSimulation
|
||||
PrintSimulationRegisteredComponents();
|
||||
|
||||
// 启动仿真系统
|
||||
simulationManager.StartSimulation(timeStep);
|
||||
simulationManager.StartSimulation(this.TimeStep);
|
||||
|
||||
while (simulationManager.State == SimulationState.Running)
|
||||
{
|
||||
// 让仿真管理器统一处理所有实体的更新
|
||||
simulationManager.Update(timeStep);
|
||||
simulationManager.Update(this.TimeStep);
|
||||
|
||||
// 检查是否还有活跃的导弹
|
||||
var activeMissiles = simulationManager.GetEntitiesByType<BaseMissile>()
|
||||
@ -1069,7 +1069,7 @@ namespace ThreatSource.Tools.MissileSimulation
|
||||
// 打印状态
|
||||
PrintSimulationStatus();
|
||||
|
||||
Thread.Sleep((int)(timeStep * 1000));
|
||||
Thread.Sleep((int)(TimeStep * 1000));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -51,6 +51,7 @@ namespace ThreatSource.Tools.MissileSimulation
|
||||
Console.WriteLine($"3. 配置干扰 {simulator.GetActiveJammingDescription()} {(string.IsNullOrEmpty(simulator.SelectedMissileId) ? "(需先选导弹)" : "")}");
|
||||
Console.WriteLine($"4. 设置日志级别 (当前级别: {simulator.CurrentLogLevel})");
|
||||
Console.WriteLine($"5. 开始仿真 {(string.IsNullOrEmpty(simulator.SelectedMissileId) ? "(需先选导弹)" : "")}");
|
||||
Console.WriteLine($"6. 设置仿真步长 (当前: {simulator.TimeStep}s)");
|
||||
Console.WriteLine("0. 退出程序");
|
||||
Console.Write("\n请选择: ");
|
||||
string choice = Console.ReadLine()?.ToLower() ?? string.Empty;
|
||||
@ -85,6 +86,9 @@ namespace ThreatSource.Tools.MissileSimulation
|
||||
Console.WriteLine("请先选择导弹并完成基本配置 (选择导弹是启动仿真的最低要求)。");
|
||||
}
|
||||
break;
|
||||
case "6":
|
||||
ConfigureTimeStep(simulator);
|
||||
break;
|
||||
case "0":
|
||||
exitProgram = true;
|
||||
break;
|
||||
@ -349,5 +353,43 @@ namespace ThreatSource.Tools.MissileSimulation
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void ConfigureTimeStep(ComprehensiveMissileSimulator simulator)
|
||||
{
|
||||
bool backToMainMenu = false;
|
||||
while (!backToMainMenu)
|
||||
{
|
||||
Console.WriteLine("\n--- 设置仿真步长 ---");
|
||||
Console.WriteLine($"当前步长: {simulator.TimeStep}s");
|
||||
Console.WriteLine("1. 低精度 (0.02s)");
|
||||
Console.WriteLine("2. 中精度 (0.01s)");
|
||||
Console.WriteLine("3. 高精度 (0.005s)");
|
||||
Console.WriteLine("0. 返回主菜单");
|
||||
Console.Write("请选择步长: ");
|
||||
string input = Console.ReadLine()?.ToLower() ?? string.Empty;
|
||||
|
||||
switch (input)
|
||||
{
|
||||
case "1":
|
||||
simulator.TimeStep = 0.02;
|
||||
Console.WriteLine($"仿真步长已设置为: {simulator.TimeStep}s (低精度)");
|
||||
return; // 设置后返回主菜单
|
||||
case "2":
|
||||
simulator.TimeStep = 0.01;
|
||||
Console.WriteLine($"仿真步长已设置为: {simulator.TimeStep}s (中精度)");
|
||||
return; // 设置后返回主菜单
|
||||
case "3":
|
||||
simulator.TimeStep = 0.005;
|
||||
Console.WriteLine($"仿真步长已设置为: {simulator.TimeStep}s (高精度)");
|
||||
return; // 设置后返回主菜单
|
||||
case "0":
|
||||
backToMainMenu = true;
|
||||
break;
|
||||
default:
|
||||
Console.WriteLine("无效选择,请重试。");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user