создание и пересечение шестигранников с CGAL

1

Используя привязки Python для CGAL, Я не могу понять, как создать гексаэдр, и как вычислить его пересечение с другим гексаэдром.

У меня есть 8 входных точек, которые являются углами гексаэдра:

Изображение 174551

Мой код делает это:

P = Polyhedron_3()
bottom = P.make_tetrahedron(p[0],p[1],p[2],p[3])
top = P.make_tetrahedron(p[4],p[5],p[6],p[7])
left = P.make_tetrahedron(p[0],p[1],p[5],p[4])
right = P.make_tetrahedron(p[3],p[2],p[6],p[7])
front = P.make_tetrahedron(p[4],p[7],p[3],p[0])
back = P.make_tetrahedron(p[1],p[2],p[6],p[5])

но когда я подсчитываю точки в полученном многограннике, 24 - каждая грань не соединяется со своими соседями.

Как я могу построить твердый гексаэдр с использованием Python CGAL?

И, наконец, успешно построив два таких многогранника, как мне рассчитать их пересечение?

Теги:
geometry
cgal

1 ответ

1
Лучший ответ

Вам понадобится создать начальный тетраэдр, затем используйте split_edge три раза и переместите вновь созданные вершины туда, где они должны быть. Затем используйте другую комбинацию split_facet и split_edge для "формования" гексаэдра на место.

См. Раздел 25.3.7 Документация CGAL, чтобы убедиться, что это делается в явной форме для специального случая гексаэдр с вершинами [0,0,0], [1,0,0], [0,1,0], [0,0,1], [1,1,0], [1,0,1], [0,1,1] и [1,1,1], без (я считаю) любой потери общности.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню