Compare commits

..

No commits in common. "e686eb3e0605a156be5cdd0d34ab41fd18684e08" and "3ea1a3b9c2467c104ecb7919125a4a738b4b14a3" have entirely different histories.

View File

@ -1663,14 +1663,14 @@ namespace FlightRouteV2
{ {
isPass = false; isPass = false;
long t = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); long t = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
//StrPrint("-------3D绕行开始-------"); StrPrint("-------3D绕行开始-------");
List<List<Vector3>> re = new List<List<Vector3>>(); List<List<Vector3>> re = new List<List<Vector3>>();
///判断有没有碰撞 有碰撞继续 没有直接返回 ///判断有没有碰撞 有碰撞继续 没有直接返回
List<int[]> planesCollision = AirImitation(aVecs, bVecs); //获取碰撞组 List<int[]> planesCollision = AirImitation(aVecs, bVecs); //获取碰撞组
if (planesCollision.Count == 0) if (planesCollision.Count == 0)
{ {
StrPrint("执行成功:没有检测到碰撞,故不用添加中间航点"); StrPrint("没有检测到碰撞,故不用添加中间航点");
//StrPrint($"-------3D绕行结束-------"); StrPrint($"-------3D绕行结束-------");
isPass = true; isPass = true;
return re;//直接返回 return re;//直接返回
} }
@ -1688,7 +1688,6 @@ namespace FlightRouteV2
///碰撞数 ///碰撞数
int collisionCou; int collisionCou;
///第一次绕行 中间1航点 ///第一次绕行 中间1航点
StrPrint($"3D航线第一次计算开始。");
List<int> collisionGroup = TwoArrToArr(planesCollision); //整合数组 List<int> collisionGroup = TwoArrToArr(planesCollision); //整合数组
List<Vector3> middleVecs = new List<Vector3>(); //中心航点坐标组 List<Vector3> middleVecs = new List<Vector3>(); //中心航点坐标组
for (int i = 0; i < planeCou; i++) for (int i = 0; i < planeCou; i++)
@ -1700,7 +1699,7 @@ namespace FlightRouteV2
{ {
if (cancellationToken.IsCancellationRequested)//外部法取消指令 if (cancellationToken.IsCancellationRequested)//外部法取消指令
{ {
StrPrint("取消3D航线操作。"); StrPrint("-------3D绕行操作被取消-------");
return null; // 退出函数 return null; // 退出函数
} }
int progress = 0;//进度 int progress = 0;//进度
@ -1709,7 +1708,7 @@ namespace FlightRouteV2
progress++; progress++;
GetVal(progress / collisionGroup.Count * 100); GetVal(progress / collisionGroup.Count * 100);
List<Vector3> grv = GetRingVec(aVecs[i], bVecs[i], 0.5, 5, 4, 1500, 300);//中间可绕行航点列表 List<Vector3> grv = GetRingVec(aVecs[i], bVecs[i], 0.5, 5, 4, 1500, 300);//中间可绕行航点列表
StrPrint($"3D航线第一次计算进度:{progress}/{collisionGroup.Count},本次计算{grv.Count}次"); StrPrint($"进度:{progress}/{collisionGroup.Count},本次绕行{grv.Count}次");
foreach (Vector3 v in grv) foreach (Vector3 v in grv)
{ {
middleVecs[i] = v; middleVecs[i] = v;
@ -1732,22 +1731,21 @@ namespace FlightRouteV2
//没有碰撞 返回一个中间航点 并返回 //没有碰撞 返回一个中间航点 并返回
if (collisionGroup.Count == 0) if (collisionGroup.Count == 0)
{ {
StrPrint("执行成功:第一次计算即成功!"); StrPrint("第一次绕行成功!");
t = DateTimeOffset.UtcNow.ToUnixTimeSeconds() - t; t = DateTimeOffset.UtcNow.ToUnixTimeSeconds() - t;
StrPrint($"用时:{t}秒"); StrPrint($"用时:{t}秒");
//StrPrint($"-------3D绕行结束-------"); StrPrint($"-------3D绕行结束-------");
re.Add(middleVecs); re.Add(middleVecs);
return re; return re;
} }
else else
{ {
string mappingOutput = string.Join(", ", collisionGroup.Select(index => $"{mappingId[index]}号")); // 构建映射关系字符串 string mappingOutput = string.Join(", ", collisionGroup.Select(index => $"{mappingId[index]}号")); // 构建映射关系字符串
StrPrint($"3D航线第一次计算之后仍有{collisionGroup.Count}架有碰撞:{mappingOutput}"); StrPrint($"{collisionGroup.Count}架有碰撞:{mappingOutput}");
//StrPrint("第一次绕行未成功!"); StrPrint("第一次绕行未成功!");
} }
///第二次绕行 两头 两航点 ///第二次绕行 两头 两航点
StrPrint($"3D航线第二次计算开始。");
bool isPassMark = false; bool isPassMark = false;
planesCollision = AirImitation(aVecs, bVecs); //获取碰撞组 planesCollision = AirImitation(aVecs, bVecs); //获取碰撞组
collisionGroup = TwoArrToArr(planesCollision); //整合数组 collisionGroup = TwoArrToArr(planesCollision); //整合数组
@ -1763,7 +1761,7 @@ namespace FlightRouteV2
{ {
if (cancellationToken.IsCancellationRequested)//外部法取消指令 if (cancellationToken.IsCancellationRequested)//外部法取消指令
{ {
StrPrint("取消3D航线操作。"); StrPrint("-------3D绕行操作被取消-------");
return null; // 退出函数 return null; // 退出函数
} }
int progress = 0;//进度 int progress = 0;//进度
@ -1776,7 +1774,7 @@ namespace FlightRouteV2
sgrv1.Insert(0, secondMiddleVecsOne[i]); sgrv1.Insert(0, secondMiddleVecsOne[i]);
List<Vector3> sgrv2 = GetRingVec(aVecs[i], bVecs[i], 1, 30, 10, 600, 300);//中间可绕行航点列表 List<Vector3> sgrv2 = GetRingVec(aVecs[i], bVecs[i], 1, 30, 10, 600, 300);//中间可绕行航点列表
sgrv2.Insert(0, secondMiddleVecsTwo[i]); sgrv2.Insert(0, secondMiddleVecsTwo[i]);
StrPrint($"3D航线第二次计算进度:{progress}/{collisionGroup.Count},本次绕行{sgrv1.Count * sgrv2.Count}次"); StrPrint($"进度:{progress}/{collisionGroup.Count},本次绕行{sgrv1.Count * sgrv2.Count}次");
foreach (Vector3 v1 in sgrv1) foreach (Vector3 v1 in sgrv1)
{ {
secondMiddleVecsOne[i] = v1; secondMiddleVecsOne[i] = v1;
@ -1810,10 +1808,10 @@ namespace FlightRouteV2
//没有碰撞 返回两个中间航点 并返回 //没有碰撞 返回两个中间航点 并返回
if (collisionGroup.Count == 0) if (collisionGroup.Count == 0)
{ {
StrPrint("执行成功:第二次计算成功!"); StrPrint("第二次绕行成功!");
t = DateTimeOffset.UtcNow.ToUnixTimeSeconds() - t; t = DateTimeOffset.UtcNow.ToUnixTimeSeconds() - t;
StrPrint($"用时:{t}秒"); StrPrint($"用时:{t}秒");
//StrPrint($"-------3D绕行结束-------"); StrPrint($"-------3D绕行结束-------");
re.Add(secondMiddleVecsOne); re.Add(secondMiddleVecsOne);
re.Add(secondMiddleVecsTwo); re.Add(secondMiddleVecsTwo);
return re; return re;
@ -1821,12 +1819,11 @@ namespace FlightRouteV2
else else
{ {
string mappingOutput = string.Join(", ", collisionGroup.Select(index => $"{mappingId[index]}号")); // 构建映射关系字符串 string mappingOutput = string.Join(", ", collisionGroup.Select(index => $"{mappingId[index]}号")); // 构建映射关系字符串
StrPrint($"3D航线第二次计算之后仍有{collisionGroup.Count}架有碰撞:{mappingOutput}"); StrPrint($"{collisionGroup.Count}架有碰撞:{mappingOutput}");
//StrPrint("第二次绕行未成功!"); StrPrint("第二次绕行未成功!");
} }
///第三次绕行 两头 两航点 中间一行点(实际添加两航点 但是0.6位置航点暂不启用留给第四次绕行) 沿用第二次绕行 ///第三次绕行 两头 两航点 中间一行点(实际添加两航点 但是0.6位置航点暂不启用留给第四次绕行) 沿用第二次绕行
StrPrint($"3D航线第二次计算开始。");
isPassMark = false; isPassMark = false;
List<Vector3> thirdMiddleVecs = new List<Vector3>(); //中心航点坐标组1 List<Vector3> thirdMiddleVecs = new List<Vector3>(); //中心航点坐标组1
for (int i = 0; i < planeCou; i++) for (int i = 0; i < planeCou; i++)
@ -1837,7 +1834,7 @@ namespace FlightRouteV2
{ {
if (cancellationToken.IsCancellationRequested)//外部法取消指令 if (cancellationToken.IsCancellationRequested)//外部法取消指令
{ {
StrPrint("取消3D航线操作。"); StrPrint("-------3D绕行操作被取消-------");
return null; // 退出函数 return null; // 退出函数
} }
int progress = 0;//进度 int progress = 0;//进度
@ -1894,9 +1891,10 @@ namespace FlightRouteV2
//没有碰撞 返回三个中间航点 并返回 //没有碰撞 返回三个中间航点 并返回
if (collisionGroup.Count == 0) if (collisionGroup.Count == 0)
{ {
StrPrint("执行成功:第三次计算成功!"); StrPrint("第三次绕行成功!");
t = DateTimeOffset.UtcNow.ToUnixTimeSeconds() - t; t = DateTimeOffset.UtcNow.ToUnixTimeSeconds() - t;
StrPrint($"用时:{t}秒"); StrPrint($"用时:{t}秒");
StrPrint($"-------3D绕行结束-------");
re.Add(secondMiddleVecsOne); re.Add(secondMiddleVecsOne);
re.Add(thirdMiddleVecs); re.Add(thirdMiddleVecs);
re.Add(secondMiddleVecsTwo); re.Add(secondMiddleVecsTwo);
@ -1905,14 +1903,14 @@ namespace FlightRouteV2
else else
{ {
string mappingOutput = string.Join(", ", collisionGroup.Select(index => $"{mappingId[index]}号")); // 构建映射关系字符串 string mappingOutput = string.Join(", ", collisionGroup.Select(index => $"{mappingId[index]}号")); // 构建映射关系字符串
StrPrint($"3D航线第三次计算之后仍有{collisionGroup.Count}架有碰撞:{mappingOutput}"); StrPrint($"{collisionGroup.Count}架有碰撞:{mappingOutput}");
StrPrint("执行失败3D航线经过三次计算仍有碰撞。"); StrPrint("第三次绕行未成功!");
} }
///end ///end
t = DateTimeOffset.UtcNow.ToUnixTimeSeconds() - t; t = DateTimeOffset.UtcNow.ToUnixTimeSeconds() - t;
StrPrint($"用时:{t}秒"); StrPrint($"用时:{t}秒");
//StrPrint($"-------3D绕行结束-------"); StrPrint($"-------3D绕行结束-------");
return re; return re;
} }
/// <summary> /// <summary>