PCL 耳切法三角剖分(Surface_EarClipping)

PCL专栏目录及须知

用于简单多边形的三角剖分。

1.耳切法

大致思想:

(1)多边形的一个顶点和它相邻两个顶点可以组成一个三角形,如果这个三角形内部不存在这个多边形的其他顶点,那么就可以把这个由该顶点及其相邻点组成的三角形当做一个“耳朵”,沿着这两个相邻顶点切下这个“耳朵”,并移除“耳尖”所代表的顶点。

(2)然后对剩下的顶点组成的多边形重复上述的这个操作。

(3)直到这个多边形只剩3个顶点。即把这个多边形完全分解为三角形。

如下图:

1)对左图原始多边形,执行一次切耳之后,得到右图的一次切耳之后的耳朵三角形(耳朵1)、及剩余多边形。

2)不停重复切耳,得到如下结果。

2.使用场景

简单多边形的三角剖分。

3.完整代码

#include <pcl/io/obj_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/surface/ear_clipping.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>

int main()
{
	/****************耳切法三角剖分********************/
	pcl::PolygonMesh::Ptr cloud_obj_mesh(new pcl::PolygonMesh);
	pcl::io::loadPLYFile("D:/code/csdn/data/bunny3.ply", *cloud_obj_mesh);       // 读取为mesh格式

	// 耳切法三角剖分
	pcl::EarClipping surface;
	pcl::PolygonMesh::ConstPtr inMesh(cloud_obj_mesh);		// 设置输入三角模型
	surface.setInputMesh(inMesh);
	pcl::PolygonMesh outMesh;								// 输出的三角模型
	surface.process(outMesh);
	
	/****************展示********************/
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("surface"));
	viewer->addPolygonMesh(*cloud_obj_mesh, "cloud_obj_mesh");
	viewer->setRepresentationToWireframeForAllActors();		// mesh模型以线框图模式显示

	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer0(new pcl::visualization::PCLVisualizer("surface"));
	viewer0->addPolygonMesh(outMesh, "outMesh");
	viewer0->setRepresentationToWireframeForAllActors();		// mesh模型以线框图模式显示

	while (!viewer->wasStopped() || !viewer0->wasStopped())
	{
		viewer->spinOnce(100);
		viewer0->spinOnce(100);
		boost::this_thread::sleep(boost::posix_time::microseconds(100000));
	}

	return (0);

}

4.结果展示

原始数据(全为多边形,并不是三角面片)

剖分结果(可以看出结果均为三角面片)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值