有人可以推荐一种算法,用三角形表示的三维实体创建点样本吗?点样本应该几乎均匀地分布在表面上,并且应该保证没有任何给定半径的球适合通过点样本。
答案 0 :(得分:1)
如果您不需要最佳性能(或者您可以预先计算点数)并且不想编写大量代码,则可以使用一些蒙特卡罗变体。
您可以从模型边界框内的许多随机点开始,或者组织成具有球半径密度的网格。
然后对每一点:
我知道它很重,但代码应该相对简单。
第二个想法是另一个简单的方法:
它不会给你理想的发行版,但写起来很简单,应该可以工作:)。
答案 1 :(得分:0)
我所知道的最简单的方法是两个阶段的过程。 1)将网格展开为二维表示,2)使用采样技术,在表面上形成大致均匀分布的点。
如果您需要自己实施所有内容,那么展开过程很可能是最具挑战性的一步。像blender和meshlab这样的工具包括这样做的工具,因为问题与在3D图形中生成UV纹理坐标有关。我相信有很多算法和技术可以解决这些问题,但选择最佳可能是一个试错的情况,具体取决于你的三角形是如何退化的。
在合成的展开网格上点的均匀分布很容易 - 您可以使用low discrepancy sampling sequence(例如Halton或Hammersly序列)在您的空间上产生几乎均匀的点分布,并且拒绝采样删除任何不属于展开网格的点。
您需要做一些额外的检查,以确保展开时网格的接缝保持适当的采样水平,以确保在重新折叠时满足您对最小球的要求。
根据过去的经验,这种方法的警告是,如果你的网格不是多方面的(即它有裂缝,自交叉或丁字路口),你几乎肯定要在开始之前清理它们。对于非常大的数据集,这可能非常耗时。