Delaunay三角剖分算法

在图像处理中,经常会使用到三角剖分算法;

具体定义及其算法可以参考:http://baike.so.com/doc/5447649.html

下面放出来代码:

Delaunay接口为存C;

测试是使用QT;

下面仅仅贴出调用方法,其他的代码见文件

	if( num_points >= 3 )//三角形必须大于3个
	{
		int *faces = NULL;//接受生成三角形的点
		int offset = 0;//用于去除每个三角形的点
		int num_faces = delaunay2d((float*)points, num_points, &faces);//输入一堆不相同的点,输出三角形的点 返回三角形个数+1 这个1代表凸点的多边形

		char str[512];
		sprintf(str, "number of convex hull vertices: %d", faces[0]);//凸点个数
		QPointF	pf[16];

        //过滤掉外围的凸点
        offset += (1+faces[0]);
        
        for( i = 1; i < num_faces; i++ )
		{
			int num_verts = faces[offset];
			offset++;
//每个三角形都有三个点构成
			for( int j = 0; j < num_verts; j++ )
			{
				int p0 = faces[offset + j];
                pf[j] = QPointF(points[p0].x, points[p0].y);
			}

			painter.setBrush(QBrush(QColor(rand() % 256, rand() % 256, rand() % 256)));
            painter.drawPolygon(pf, num_verts);
			offset += num_verts;
		}
		free(faces);

		painter.setBrush(Qt::NoBrush);
		painter.drawText(rect(), Qt::AlignCenter, str);
	}

  源代码为:delaunay

原文地址:https://www.cnblogs.com/lanye/p/3489154.html