在图像处理中,经常会使用到三角剖分算法;
具体定义及其算法可以参考: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