前一阵子一直在忙qt3d的一个项目,主要是被三角剖分的部分给难住。需要从一张图片中提取封闭轮廓,然后在qt3d中将这些轮廓立体呈现出来。qt3d中只提供了三角形和四边形的绘制接口,所以想要将任意一个封闭多边形画出来,必须要进行平面多边形的三角剖分(所谓三角剖分就是将一个多边形或一个曲面,用互不重叠的三角形拼凑出来,类似于微积分中的用小的线段逼近一条曲线一样,这里用许多的小三角形逼近一个曲面)。我处理的多边形是最简单的一类,不含孔洞不自相交的多边形。
一、基础知识
如何判断两条线段不相交:有两条线段ab和cd,令u = (a-c)x(d-c),v = (b-c)x(d-c);p = (c-a)x(b-a),q = (d-a)x(b-a)。若u·v≤0且p·q≤0,ab与cd相交,否则不相交。
如何判断一个点是否在一个三角形内部:设三角形abc,顶点p,分别构造向量ab,ac,ap,pb,pc,三角形的面积可以通过两条边向量的叉积表示,S△abc = 0.5*abs(abxac);分别计算S△abc,S△abp,S△acp,S△pbc,若 |S△abc - (S△abp + S△acp + S△pbc)|<0.005那么说明p点在△abc的内部或者边缘上。
如何判断一个多边形 的顶点是凹点还是凸点:这个需要结合顶点序列的方向来判断,