GDAL构建Delaunay三角网
GDAL能创建Delaunay三角网我是没想到的,需要包含头文件gdal_alg.h
使用GDALTriangulationCreateDelaunay函数,函数说明在此 ,三个参数:
第一个是点的个数,第二三个分别是点的X坐标和点的Y坐标。
返回值是GDALTriangulation* 类型的,GDALTriangulation是个结构体,包含三个成员,一个是int nFacets ,表示三角面片的个数,int类型;第二个是GDALTriFacet* pasFacets,表示三角面片数组,GDALTriFacet仍然是一个结构体,包含两个成员,int anVertexIdx
[3]保存了三角形三个顶点的索引,int anNeighborIdx
[3]保存了此三角面片相邻的三角面片的索引或者值为-1;GDALTriBarycentricCoefficients* pasFacetCoefficients保存的是三角形的重心系数,也是个结构体,这里不再叙述(不是很明白)。
使用GDALTriangulationCreateDelaunay后要使用GDALTriangulationFree释放资源,还有一些相关函数,可以去翻阅相关手册。
以下代码中
ui->textEdit->append(QString::number(indexOne)+" "+QString::number(indexTwo)+" "+QString::number(indexThree));
因为是用Qt,这句是将每个三角面片的顶点索引输出到testEdit中,所以这句话忽略。
double *x= new double[5]{0,2,4,4,0}; double *y = new double[5]{0,2,0,4,4}; GDALTriangulation* triangularmesh = GDALTriangulationCreateDelaunay(5, x, y); for (int i = 0; i < triangularmesh->nFacets; i++) { int indexOne = triangularmesh->pasFacets[i].anVertexIdx[0]; int indexTwo = triangularmesh->pasFacets[i].anVertexIdx[1]; int indexThree = triangularmesh->pasFacets[i].anVertexIdx[2]; ui->textEdit->append(QString::number(indexOne)+" "+QString::number(indexTwo)+" "+QString::number(indexThree)); } delete[] x; delete[] y; GDALTriangulationFree(triangularmesh);