Я хочу выполнить пользовательскую стратегию уточнения в тетраэдрической сетке. Мой ввод - это облако точек, и я его тетраэдрически, используя 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. Любая помощь будет оценена. Заранее спасибо.