Проекция многогранника на плоскость xy с помощью CGAL - PullRequest
0 голосов
/ 22 мая 2018

Я изо всех сил пытаюсь вычислить проекцию многогранника на плоскость xy.В настоящее время я использую следующий код:

vector<Polygon_2> ii;
vector<Polygon_with_holes_2> oi;
for (Facet_iterator s = polyhedron.facets_begin();
                            s != polyhedron.facets_end(); ++s) {
    Halfedge_facet_circulator h = s->facet_begin(), he(h);

    Polygon_2 polygon;
    do {
        Point p1 = h->vertex()->point();
        polygon.insert(polygon.vertices_end(), Point_2(p1.x(), p1.y()));
    } while (++h != he);
    if (polygon.orientation() == CGAL::NEGATIVE)
        polygon.reverse_orientation();
    ii.push_back(polygon);
}
CGAL::join(ii.begin(), ii.end(), std::back_inserter(oi));

Эта функция выполняет итерацию по многогранным поверхностям, и для каждой поверхности 2-мерная проекция выполняется вручную.Полученные многоугольники затем объединяются.

Однако из руководства я считаю, что это не тот способ использования библиотеки для такой задачи.Класс Project_traits_xy_3 намекает на то, что существует обычный способ достижения проекции с помощью CGAL.Однако я не смог найти подходящей документации или примеров для этого.

Может кто-нибудь указать мне правильное направление здесь?Я чувствую, что это должно быть стандартной задачей с элегантным способом.

1 Ответ

0 голосов
/ 23 мая 2018

то, что вы ищете, - это вычисление силуэта, а в CGAL мы не используем его как функцию высокого уровня.Ваш код делает работу.

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

Класс черт проекции используется для интерпретации 3D-точек как 2D-точек, например, для построения 2D триангуляции с ограниченным Делоне, но я не вижу, где это может пригодиться.

...