点云网格化算法---MPA
MPA网格化算法思路
第一步:初始化一个种子三角面。(随机选点,基于该点进行临近搜索到第二点;在基于该线段中点临近搜索到第三点)
图1
第二步:在种子三角面的基础上,进行面片的扩充,利用边的中点进行临近搜索,碰到合适的点,就会跟这条边构成一个新的三角面,同时构造出两条新边。依次类推… 直到队列中不再有满足条件外边提供中点检索为止。
第三步:寻找新的种子三角面,进行第二步;直到再也无法找到合适的种子三角面,退出循环。
第四步:输出mesh,包含生成三角面,以及原始点云。
图2
主要算法实现:
for (size_t i = 0; i < num; i+=10) { if (point_vect[i].size()>0) { continue; } PointType searchPoint = cloud_ptr->points[i]; initializeTriangle(searchPoint); //第一步 初始化一个种子三角面 while (true) { if (edge_queue.empty()) { //std::cout << "MPA::initializeTriangle() failed ..." << std::endl; break; } PCTTM_Edge search_edge = edge_queue.front(); bool bad_edge = false; for (size_t i = 0; i < point_vect[search_edge.p_index_first].size(); i++) { if (point_vect[search_edge.p_index_first][i].p_index == search_edge.p_index_end && point_vect[search_edge.p_index_first][i].ptp_relation == 2) { bad_edge = true; } } if (bad_edge) { edge_queue.pop(); continue; } searchPointMPA(search_edge, 5); //第二步 搜索点 扩展边 edge_queue.pop(); } }
实现结果:
17万个点,构建了32.7万个面,目前用时26.774秒。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律