Algorithm 在B-rep几何图形中查找内表面

Algorithm 在B-rep几何图形中查找内表面,algorithm,computational-geometry,topology,Algorithm,Computational Geometry,Topology,我有一个内部有洞的实体。我的实体在B-rep中。更确切地说,我的实体是一个多边形列表,这些多边形是点列表。我想区分内表面和外表面。我的多边形列表具有随机顺序 我希望能够区分外部表面和内部表面。它确实存在于文学作品中,但我找不到它 我认为BSP树可以帮助我解决这样的问题,但我不知道如何解决 编辑: 以下是我的情况的一个例子: 我有一个办法。我的算法看起来很健壮,但有点愚蠢,我相信在文献中有更聪明的东西: 首先,我需要在我的物体内得到一个点 我计算包含多边形的边界框 如果它的x,y,z优于或等于

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

我希望能够区分外部表面和内部表面。它确实存在于文学作品中,但我找不到它

我认为BSP树可以帮助我解决这样的问题,但我不知道如何解决

编辑:

以下是我的情况的一个例子:

我有一个办法。我的算法看起来很健壮,但有点愚蠢,我相信在文献中有更聪明的东西:

首先,我需要在我的物体内得到一个点

  • 我计算包含多边形的边界框
  • 如果它的x,y,z优于或等于 低于边界框的任何其他x、y、z
找到一个外部面

  • 从这一点上,我做了一个射线(选择可能是随机的,但是 光线可能无法与对象相交。我的外部 边界框的点和中心应始终良好)
  • 通过光线跟踪,我可以找到它接触的第一个多边形。可能 首先触摸顶点。然后我只取其中一个多边形 包含此顶点
将多边形列表拆分为较小的列表

让我们将p称为我的多边形列表,L称为多边形列表,然后将L称为包含在L中的多边形列表。
li应仅包括相互接触的多边形。
让我们定义什么是相互接触的: 我们将多边形定义为边列表。
一般的定义是两个多边形(多边形1、多边形2)在以下情况下相互接触:∃(第1、2边)∈ polygon1 x polygon2

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

  • 我取P中的第一个多边形
  • 我从P中删除它,并将其添加到li中
  • 我看它是否接触到P中的任何其他多边形
  • 我得到这些多边形,将它们从P中移除,然后将它们添加到li中
  • 我看这些多边形是否与P中的其他多边形相接触
  • 对于这些新接触的多边形,我重复步骤4。但如果在第5步它没有碰到任何东西,我就进入下一步
  • 我把李放在L
  • 如果P仍然包含至少一项,则转到步骤1
  • 只有一个子列表包含我在上面找到的外部多边形。其他是内部的。
    何时检查哪些子列表包含外部多边形可能取决于数据结构,但这是一个优化问题,而不是健壮性问题