假设有一个表示对象 A 的多面体,并且想要获得其凹度。
一种选择,包括计算对象 A 的凸包 CH 并将差异 CH-A 拆分为连接的组件。
为此,我尝试使用Nef Polyhedrons module in CGAL。这样可以将 A 和 CH 转换为Nef多面体,以便轻松应用布尔运算(如集合差异)。
一旦差值以Nef多面体形式获得,则其mark
字段中标有1的体积应表示差的有限连接分量,并且可以使用函数{{1 }}。
从理论上讲,这种方法应该可以正常工作,但是实际上,当使用的多面体是从STEP文件转换为定义多面体的三角形网格的结果时,就会出现问题。实际上,请考虑例如STEP文件中的四边形面。在转换过程中,必须至少转换两个三角形。问题在于,将生成的三角形保存到表示转换后的网格的文件(例如OFF文件,STL或OBJ)中时,由于顶点坐标近似,它们可能会失去共面性。
在计算Nef多面体差异时,这会导致以下不良行为:
convert_inner_shell_to_polyhedron
会显示一条错误消息,例如
lookup_halfedge():输入错误:构面11共享顶点的半边 2到第1面的小平面0。
第一个行为不是什么大问题:可以检查转换为多面体的每个体积的厚度,并最终将其丢弃。但是,第二个返回空的多面体,据我所知,没有办法获得所需的体积。
因此,我要求您提供解决此问题的方法。在这里,我报告我对此所做的一些观察: