使用CGAL创建和交叉六面体
我在使用CGAL的Python绑定时,遇到了一些问题。我不知道怎么创建一个六面体,也不知道怎么计算它和另一个六面体的交集。
我有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构建一个完整的六面体呢?
最后,在成功构建两个这样的多面体后,我该如何计算它们的交集呢?
1 个回答
1
你需要先创建一个初始的四面体,然后使用 split_edge
三次,并把新创建的顶点移动到它们应该在的位置。接着再用 split_facet
和 split_edge
的组合来“塑造”六面体,使它到达你想要的形状。
可以查看 CGAL文档的第25.3.7节,里面详细讲解了如何处理一个特殊的六面体,顶点分别是 [0,0,0]
、[1,0,0]
、[0,1,0]
、[0,0,1]
、[1,1,0]
、[1,0,1]
、[0,1,1]
和 [1,1,1]
,而且我相信这样做并没有失去一般性。