Используя привязки Python для CGAL, Я не могу понять, как создать гексаэдр, и как вычислить его пересечение с другим гексаэдром.
У меня есть 8 входных точек, которые являются углами гексаэдра:
Мой код делает это:
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?
И, наконец, успешно построив два таких многогранника, как мне рассчитать их пересечение?
Вам понадобится создать начальный тетраэдр, затем используйте 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]
, без (я считаю) любой потери общности.