Таможенное уточнение Делоне с CGAL Delaunay3D - PullRequest
0 голосов
/ 29 октября 2019

Я хочу выполнить пользовательскую стратегию уточнения в тетраэдрической сетке. Мой ввод - это облако точек, и я его тетраэдрически, используя 3D-процедуру Делоне, доступную в CGAL. Точки имеют скалярные значения, связанные с ним. Теперь я хочу уточнить тетраэдрическую сетку с помощью следующей стратегии:
1. Получить максимальное значение среди вершин каждого тетраэдра.
2. Получить значение в точке, которая будет вставлена ​​(может быть барицентр, взвешенный центроид или центр окружности).
3. Если разница достаточно велика, добавьте эту точку.

Есть идеи, как это сделать эффективно? Примечание: мне не требуется сохранение пространственных объектов 0-1.
Я уже попробовал вышеуказанную стратегию. Позвольте мне показать, что я сделал до сих пор.

// Assume T is Delaunay_3D triangulation CGAL mesh and I have an oracle f that tells me what is the value at the point that is going to be inserted if conditions are met.

    bool updated = true;
    int it = 0;
    while (updated)
    {
        updated = false;
        std::vector<std::pair<Point, unsigned> > point_to_be_inserted;

        for (auto cit = T.finite_cells_begin(); cit != T.finite_cells_end(); cit++)
        {


            Cell_handle c = cit;
            Point v =  Maximum valued vertex
           Point q = Point that is going to be inserted
            double val_at_new_pt = oracle(q, &pts, var);
            double ratio = std::abs(max_val - val_at_new_pt) / max_val;

            if (ratio > threshold) {
                point_to_be_inserted.emplace_back(std::make_pair(q, new_pt_ind));
                updated = true;
            }
        }
        if (updated)
        {
            std::cout << "Total pts inserted in it: " << it << " " << point_to_be_inserted.size() << std::endl;
            T.insert(point_to_be_inserted.begin(), point_to_be_inserted.end())
        }
}

Проблема в том, что это довольно медленно (каждый раз повторяя все ячейки). Я не нахожу какой-либо эффективной стратегии для уточнения на местном уровне. Я пытался использовать очередь, но дескрипторы ячейки запутались после того, как я выполнил одну итерацию уточнения. У меня не может быть карты, которая говорит мне, очищены ли тетраэдры или нет, потому что каждый раз после вставки новых точек создаются cell_handles. Любая помощь будет оценена. Заранее спасибо.

...