4

假设我有 2 个多面体,在空间上部分重叠。每个都由连接的多边形列表定义,而多边形列表又由线段列表定义(由 2 个点定义)。是否有一个简单的算法来创建多面体,它是这些多面体边界的并集,但会删除所有内部部分?

同样,在此之后,我将实现减法和交集方法。

我正在为这个开源库做出贡献。源代码: https ://bitbucket.org/Clearspan/geometry-class-library/src/34a2ab5031879d051abb855a828368e397b4f5b6/GeometryClassLibrary/Solids/Polyhedron.cs?at=master

4

2 回答 2

2

这是计算机图形学中一个已知的研究问题,用于在多边形网格上找到布尔运算。您可以在以下位置查看一些相关论文:

http://arxiv.org/pdf/1308.4434.pdf

http://www.tandfonline.com/doi/abs/10.3722/cadaps.2010.405-415?journalCode=tcad20

(您可以通过查看引用的论文找到较旧的作品)

一般来说,多边形网格在布尔运算中不是很有效。在对象由函数表示的隐式建模中,布尔运算可以很容易地解决。稍后,可以通过移动立方体将对象转换为网格(例如)。

于 2015-05-19T04:52:26.930 回答
2

关于这个主题有相当广泛的文献。例如,参见用于相交三维凸多面体的最佳算法

允许非凸多面体使事情变得更加困难。将对象拆分为凸形然后尝试找到交点可能是一个想法。

与其将面视为点和线,不如将它们视为平面。您可以轻松找到平面的交点。

你问是否有一个简单的算法。答案可能是否定的。有算法,但有许多边缘情况需要考虑:如果两个多面体在一个点相遇怎么办?还有效率问题。一种天真的方法会使每张脸与其他每张脸相交。制作算法 O(n^2)。如果多面体有数百或数千个面,这将严重缩放,这在建模中很常见。

于 2015-05-19T08:35:27.190 回答