假设我有2个多面体,在空间上部分重叠。每一个都由连接的多边形列表定义,而多边形又由线段列表定义(由2个点定义)。是否有一种简单的算法来创建多面体,这些多面体是这些多面体边界的并集,但会删除所有内部部分?
同样,在此之后,我将实现减法和相交方法。
我正在为这个开源库做贡献。源代码:
https://bitbucket.org/Clearspan/geometry-class-library/src/34a2ab5031879d051abb855a828368e397b4f5b6/GeometryClassLibrary/Solids/Polyhedron.cs?at=master
最佳答案
关于这个主题有很多文献。参见例如an optimal algorithm for intersecting three dimensional convex polyhedra。
允许使用非凸多面体会使事情变得更加困难。将对象拆分为凸形,然后尝试找到相交可能是一个想法。
与其将这些面视为点和线,不如将它们视为平面会更容易。您可以轻松找到飞机的交点。
您问是否有一个简单的算法。答案可能是否定的。有算法,但要考虑许多边缘情况:如果两个多面体在同一点相遇会怎样?还存在效率问题。天真的方法会使每个面孔彼此相交。使算法为O(n ^ 2)。如果多面体具有数百或数千个面,这将严重缩放,这在建模中很常见。