在B-rep几何体

时间:2016-05-25 13:44:24

标签: algorithm computational-geometry topology

我有一个内部孔洞。我的实力是B-rep。更确切地说,我的实体是一个点列表的多边形列表。我想区分内部表面和外部表面。我的多边形列表有一个随机顺序。

我希望能够将外部表面与内部表面区分开来。它确实存在于文献中,但我找不到它。

我认为BSP树可以帮助我解决这个问题,但我找不到如何。

编辑:

以下是我的情况示例: enter image description here

我知道如何做到这一点。我的算法似乎很健壮,但有点愚蠢,我确信在文献中有更聪明的东西:

首先,我需要在对象中找到一个点

  • 我计算包含多边形的边界框
  • 如果它的x,y,z优于或者,那么我可以很容易地在外面有一个点 不如边界框的任何其他x,y,z

找到一个外部面孔

  • 从这一点来说,我确实拍了一条光线(选择可能是随机的,但是 光线可能无法与对象相交。我的外表之间的光线 点和边界框的中心应该总是很好)
  • 使用光线追踪,我可以找到它接触的第一个多边形。有可能 首先触摸顶点。然后我只取一个多边形 包含这个顶点。

将我的多边形列表拆分为较小的列表

让我们调用P我的多边形列表,L调用多边形列表,然后l i 包含在L中的多边形列表
l i 应仅包含相互接触的多边形 让我们来定义彼此接触的东西: 我们将多边形定义为边列表 一般定义是两个多边形(polygon 1 ,polygon 2 )如果∃(edge 1 ,edge 2)相互接触)∈alultigon 1 x polygon 2

对于我的简化案例:我的多边形是点列表,我知道两个相互接触的多边形意味着它们有一个共同的顶点。我将在实践中使用这个简化的定义,但它不会改变方法。

  1. 我在P
  2. 中取第一个多边形
  3. 我从P中删除它并将其添加到l i
  4. 我看它是否接触到P
  5. 中的任何其他多边形
  6. 我得到那些多边形,从P中删除它们并将它们添加到l i
  7. 我看到这些多边形是否与P
  8. 中的其他多边形接触
  9. 对于那些新触摸的多边形,我重复步骤4.但是如果它在步骤5没有碰到任何东西,我会进入下一步。
  10. 我把l i 放在L
  11. 如果P仍包含至少一个项目,我会转到步骤1
  12. 只有一个子列表包含外部l i 我在上面找到的外部多边形。其他是内部的 何时检查哪些子列表包含外部多边形可能取决于数据结构,但这是优化问题,而不是鲁棒性。

0 个答案:

没有答案