CGAL - 在3d中的Delaunay三角剖分后检索到错误的顶点索引

时间:2014-10-28 13:21:25

标签: c++ cgal delaunay

我在VS2012上使用最新的CGAL(4.5)。在Delaunay三角剖分之后,我将整个四面体网格输出到" testFile1"使用CGAL Delaunay三角测量的默认流输出。 " testFile1"中的数据是对的。(我可视化网格,没关系)

然后我遍历所有四面体并得到顶点'索引并将它们输出到" testFile2",但索引与" testFile1"中的索引完全不同。我想象网格,它完全是一团糟。

我也在自己的迭代中输出每个四面体的顶点位置,它们与testFile1相同(第一个四面体的第一个顶点的坐标是相同的,依此类推)。因此testFile1和testFile2中的四面体是相同的,问题在于获取顶点索引。

我的代码:

std::vector<std::pair<Point,int>> V;
V.reserve(pointCount);
//push selected point into V with index info
for(int i=0;i<pointCount;i++)
{
    int id = randomNumbers[i];
    V.push_back(std::make_pair(Point(
        points[id]._p[0], 
        points[id]._p[1], 
        points[id]._p[2]), i));
}

Delaunay T;
T.insert(V.begin(), V.end());

//output vertices position and vertices index and cell neighbor index to testFile1
//data in testFile1 is right
std::ofstream oFileT("testFile1",std::ios::out);
oFileT << T;        



//output indices to testFile2 by my own iteration
std::ofstream oFileT("testFile2",std::ios::out);
int index = 0;
Delaunay::Finite_cells_iterator it;
for(it = T.finite_cells_begin(); it!=T.finite_cells_end(); ++it)
{
    for(int i=0;i<4;i++)
    {
        //here the coord is right 
        float testCoord = T.tetrahedron(it).vertex(i).x();

        //but the index here is totally different with testFile1
        int info = 0;
        if(!T.is_infinite(it->vertex(i)))
            info = it->vertex(i)->info();

        oFileT<<info<<" ";  //output vertices index to testFile2
    }
    oFileT<<std::endl;
    index++;
}

有什么想法吗?

更新:

奇怪的是,例如:

在testFile1:tet index:702 25 35 153

在我自己的迭代中,它 - &gt; vertex(i) - &gt; point()。x()得到702 \ 25 \ 35 \ 153&#39; sx coord但是它 - &gt; vertex(i) - &gt; info()获得1601 \ 1352 .....

1 个答案:

答案 0 :(得分:2)

顶点沿希尔伯特曲线排序,以加速三角测量的构建。如果你想让迭代的顺序与info()字段匹配,只需迭代顶点一次并设置info()