PCL源码分析:Ear Clipping三角化算法(阅读经典)
Posted 大鱼BIGFISH
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PCL源码分析:Ear Clipping三角化算法(阅读经典)相关的知识,希望对你有一定的参考价值。
文章目录
一、简介
该算法是一个多边形三角化的算法,多边形的一个顶点和它相邻两个顶点可以组成一个三角形,如果这个三角形内部不存在这个多边形的其他顶点,那么就可以把这个由该顶点及其相邻点组成的三角形当做一个“耳朵”,沿着这两个相邻顶点切下这个“耳朵”,然后重复上述的这个操作,直到这个多边形只剩3个顶点。这样,就可以把这个多边形完全分解为三角形。
二、源码分析
在了解了上述算法的大致思路之后,我们可以仔细看一下PCL中关于该算法的实现过程:
源代码文件:ear_clipping.cpp
void
pcl::EarClipping::triangulate (const
使用 PCL OctreePointCloudVoxelCentroid 栅格化点云
【中文标题】使用 PCL OctreePointCloudVoxelCentroid 栅格化点云【英文标题】:Rasterize pointcloud with PCL OctreePointCloudVoxelCentroid 【发布时间】:2021-06-11 12:10:28 【问题描述】:我尝试通过 PCL::OctreePointCloudVoxelCentroid 栅格化 X-0-Z 点云,以便之后在点云上使用一些图像处理算法。但输出不是我所期望的。如果至少一个点在一个盒子里,我想要轴对齐八叉树中每个盒子的质心。八叉树的边界框应该很好定义。 对于测试,我使用 4 个点: (-1.8000000 1 -1.8000000) (-1.4000000 1 -1.4000000) (-0.5000000 1 0.4000000) (0.4000000 1 1.8000000)
我使用的代码:
pcl::octree::OctreePointCloudVoxelCentroid<pcl::PointXYZ> octree (1.0f);
octree.defineBoundingBox(-2.0,-1.5,-2.0,2.0,2.5,2.0);
octree.setInputCloud (fourpoints);
octree.addPointsFromInputCloud ();
黑色:原点;红色:算法输出;绿色:想要的点。 算法输出:坐标(-1.6 1 -1.6)(-0.5 1 0.4)(0.4 1 1.8)
【问题讨论】:
【参考方案1】:OctreePointCloudOccupancy 而不是 OctreePointCloudVoxelCentroid 解决了我的问题。
【讨论】:
以上是关于PCL源码分析:Ear Clipping三角化算法(阅读经典)的主要内容,如果未能解决你的问题,请参考以下文章
PCL:getCircumcircleRadius ❤️ 计算三角形外接圆半径