如何组合多面体
本文关键字:多面体 组合 何组合 | 更新日期: 2023-09-27 17:49:30
假设我有两个多面体,在空间上部分重叠。每个多边形都由一组相连的多边形定义,而多边形又由线段列表定义(线段列表由2个点定义)。是否有一个简单的算法来创建多面体,它是这些多面体的边界的联合,但去除所有的内部碎片?
同样,在此之后,我将实现一个减去,和交集方法。
我正在为这个开源库做贡献。源代码:https://bitbucket.org/Clearspan/geometry-class-library/src/34a2ab5031879d051abb855a828368e397b4f5b6/GeometryClassLibrary/Solids/Polyhedron.cs?at=master
寻找多边形网格上的布尔运算是计算机图形学中一个已知的研究问题。你可以在
查看相关论文。http://arxiv.org/pdf/1308.4434.pdfhttp://www.tandfonline.com/doi/abs/10.3722/cadaps.2010.405 - 415 ?journalcode=tcad20。
(你可以通过查看被引用的论文来找到更早的作品)
一般来说,多边形网格在布尔运算中不是很有效。布尔运算可以很容易地在隐式建模中解决,在隐式建模中,对象由函数表示。之后,可以通过移动立方体(例如)将对象转换为网格。
关于这个主题有相当广泛的文献。请参阅有关三维凸多面体相交的最佳算法的示例。
允许非凸多面体使事情变得更加困难。将你的对象分割成凸形,然后尝试找到它们的交点,这或许是个不错的主意。
与其将面视为点和线,不如将其视为平面。你可以很容易地找到平面的交点。
你问是否有一个简单的算法。答案可能是否定的。有算法,但有许多边缘情况需要考虑:如果两个多面体在一个点相遇怎么办?还有效率方面的担忧。一种天真的方法会让每一张脸都相交。让算法变成O(n²)如果多面体有数百或数千个面,这将严重缩放,因为在建模中很常见。