This commit is contained in:
xu 2024-06-24 18:33:49 +08:00
commit 3ea1a3b9c2

View File

@ -1554,24 +1554,24 @@ namespace FlightRouteV2
return re_bVecs;
}
/// <summary>
/// 智能错层
/// 智能错层 说明从A图上找出一个面最多点组成的共面以此面为错层基准做错层计算。PS:A图 B图 都可以为多个平面图形组成,但这些图形都必须平行
/// </summary>
/// <param name="aVecs">起始坐标集合</param>
/// <param name="bVecs">终点做标集合</param>
/// <param name="StrPrint">日志输出 回调函数</param>
/// <param name="layHight">错层层高</param>
/// <returns>返回一个二维向量坐标集合 middle[0]是第一个中间航点 middle[1]是第二个中间航点 返回空数组则代表两个图形不在一个平面上或者不够4个点</returns>
/// <returns>返回一个二维向量坐标集合 middle[0]是第一个中间航点 middle[1]是第二个中间航点 返回空数组有几种情况 1.A图直接飞B图无碰撞 2.A图未能找到4个点以上的共面 3.有碰撞可能是AB图初始就过近 4.AB图并不平行</returns>
public static List<List<Vector3>> CollisionLayer(Vector3[] aVecs, Vector3[] bVecs,SomeCalculateWay StrPrint, double layHight = 300)
{
long t = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
StrPrint("-------错层,开始-------");
//StrPrint("-------错层,开始-------");
List<List<Vector3>> re = new List<List<Vector3>>();
///判断有没有碰撞 有碰撞继续 没有直接返回
List<int[]> planesCollision = AirImitation(aVecs, bVecs); //获取碰撞组
if (planesCollision.Count == 0)
{
StrPrint("没有检测到碰撞,故不用添加中间航点");
StrPrint($"-------错层结束-------");
StrPrint("执行成功:没有检测到碰撞,故不用添加中间航点");
//StrPrint($"-------错层结束-------");
return re;//直接返回
}
//获取飞机总数
@ -1582,11 +1582,11 @@ namespace FlightRouteV2
///把所有点压在 主面“共面”上
List<int> maxVecsOfCoplane = FindMaxPlaneIndices(aVecs);// 找出A图共面最多点的索引
StrPrint("正在进行“共面”检测,需要一些时间请耐心等待。。。");
StrPrint("提示:正在进行“共面”检测,需要一些时间请耐心等待。。。");
if (maxVecsOfCoplane.Count < 4) //a图至少要有4个点 共面
{
StrPrint("a图案至少有4个点以上共面否则不可执行错层处理");
StrPrint($"-------错层结束-------");
StrPrint("执行失败起始图案至少有4个点以上共面");
//StrPrint($"-------错层结束-------");
return re;
}
///共面上取三个点
@ -1637,15 +1637,15 @@ namespace FlightRouteV2
{
re.Add(new_aVecs.ToList());
re.Add(new_bVecs.ToList());
StrPrint($"错层成功");
StrPrint($"执行成功。");
}
else
{
StrPrint($"检测有碰撞,错层失败");
StrPrint($"执行失败计算完成后检测有碰撞。可能原因1.起始图形或结束图形点阵距离有过近情况。2.起始图形和结束图形点阵所在面不平行");
}
t = DateTimeOffset.UtcNow.ToUnixTimeSeconds() - t;
StrPrint($"用时:{t}秒");
StrPrint($"-------错层结束-------");
//StrPrint($"-------错层结束-------");
return re;
}
/// <summary>