coding | c++ - segment和polyhedron(obj)求交

本文介绍了如何使用CGAL库的Triangle_3_Segment_3_do_intersect.h函数来计算三维模型与线段之间的交点数量。通过遍历每个三角面片并检查是否与线段相交,最终返回交点总数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用CGAL库的Triangle_3_Segment_3_do_intersect.h中的函数

 

//计算segment(p0,p1)和polyhedron的交点.;
//注意顺序,p1是模型上的点,p0是segment另外一点;
//返回segment和polyhedron交点个数
int segment_intersection_polyhedron(Point_3 p0,Point_3 p1,GLMmodel* m){

	Segment s(p0,p1);
	Kernel k;

	int crossing = 0;//交点个数,=0时可见;

	GLfloat* vertices = m->vertices;//访问obj是用的glm库的方式

	for(int i = 0;i<m->numtriangles;i++)//遍历每一个三角面片
	{
		GLMtriangle tri = m->triangles[i];
		
		Point_3 a(vertices[3*tri.vindices[0]],vertices[3*tri.vindices[0]+1],vertices[3*tri.vindices[0]+2]);
		Point_3 b(vertices[3*tri.vindices[1]],vertices[3*tri.vindices[1]+1],vertices[3*tri.vindices[1]+2]);
		Point_3 c(vertices[3*tri.vindices[2]],vertices[3*tri.vindices[2]+1],vertices[3*tri.vindices[2]+2]);

		//如果三角面片有任何一点是p1,就不算;
		if(point_equal(a,p1) || point_equal(b,p1) || point_equal(c,p1)) continue;

		Triangle t(a,b,c);

		if(CGAL::internal::do_intersect(s,t,k)){//如果相交
			crossing++;
		}
	}
	return crossing;
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值