CGAL — неверный индекс вершин, полученный после триангуляции Делоне в 3d

Я использую последний CGAL (4.5) с VS2012. После триангуляции Делоне я вывожу всю сетку тетраэдра в «testFile1» с выходным потоком по умолчанию для триангуляции CGAL Делоне. Данные в «testFile1» верны (я визуализировал сетку и все в порядке)

Затем я перебираю все тетраэдры, получаю индекс вершин и выводю их в «testFile2», но индексы совершенно отличаются от индексов в «testFile1». Я визуализировал сетку, и это беспорядок.

Я также выводил положение вершины каждого тетраэдра в моих собственных итерациях, они совпадают с testFile1 (координаты 1-й вершины 1-го тетраэдра одинаковы и т. Д.). Таким образом, тетраэдр в 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: 702 25 35 153

И в моей собственной итерации it-> vertex (i) -> point (). X () получает координату x 702 \ 25 \ 35 \ 153, но it-> vertex (i) -> info () получает 1601 \ 1352. ….

1

Решение

Вершины отсортированы вдоль кривой Гильберта, чтобы ускорить построение триангуляции. Если вы хотите, чтобы порядок итераций соответствовал полю info (), просто выполните итерацию по вершинам один раз и установите info ()

2

Другие решения


По вопросам рекламы [email protected]