用广义多面体填充体积

计算科学 网格生成
2021-12-06 07:51:56

给定一个体积(例如,一些多面体),我需要用更小的多面体填充它,以便尽可能地填充空间。约束和松弛

(0) 从计算角度来看,小多面体的数量很少,可能是 8-10。

(1) 较小的多面体大小不同,符合一定的体积分布。

(2) 较小的多面体可能具有不同的形状(四面体、六面体、八面体)和方向(即面朝上/角朝上/边朝上/介于两者之间)。

(3) 理想情况下,较小的多面体将共享面,因此它们之间没有空白空间。

(4) 大多面体的轮廓可以放宽,即小多面体不必完全符合外边界。

问题的背景是我正在尝试创建一个多晶聚合体(大多面体),它由单个晶体(小多面体)组成。进一步计算需要单个晶体的边缘向量。

从概念上讲,我在考虑以下两条路线之一:

(1) 首先根据给定的分布生成小多面体,然后尝试将它们平铺到给定的大多面体中,通过迭代修改边缘来最小化间隙/重叠。这就变成了一种包装问题

(2) 通过画线/添加顶点将大多面体分割成更小的体积,然后修改线以适应多面体。这就像多面体的德劳内三角剖分。

解决这个问题的最佳方法是什么?如果已经存在解决此问题或类似问题的方法,我将很高兴通过它们。

1个回答

我相信这里最简单的方法是使用 3D Voronoi 图算法。我建议使用Voro++您还提到您希望控制多面体的分布或统计数据,因此请在此处查看使用 Voro++ 自定义多面体分布的教程。对于所有其他有助于您入门的教程,请查看此处代码是用 C++ 编写的,您可以在 C++ 中使用它。

最后一件事是https://github.com/esean/stl_voro_fill在我最初遇到 Voro++ 并且我想将它用于任何 3D 形状以用 3D 多面体填充它时,我发现它非常酷建立在 Voro++ 之上,可以用 Voronois 填充任何封闭的 3D 表面。