带孔的网孔:内部/外部三维闭合轮廓的点

时间:2011-10-07 05:20:48

标签: computational-geometry

我有一个三维表面多边形网格,我手动定义了一个封闭的轮廓,类似于这个

enter image description here (封闭的轮廓是绿色曲线)。

我想仅标记此轮廓内的点,但是,正如您所看到的那样,黄色表面包含孔和“凸起”,这使得这种标记变得困难。我所决定的是,我想标记那些位于“外”表面的点,即不进入孔内或凸起下方(最后只是另一种类型的孔) )。

此时我只想出问题而不是想法:

  • 如何确定某个点是在闭合轮廓的内部还是外部?

一旦解决了内部/外部的问题:

  • 如何只采取闭合轮廓内但位于外表面的那些点?

感谢您的任何建议!

2 个答案:

答案 0 :(得分:0)

可以通过从区域(内部轮廓)中的点开始并迭代地将区域扩展到连接到已找到的点的点来完成,并且如果连接穿过轮廓或具有某些几何属性则停止。几何测试可以是:

  • 下一点的位置太高或太低,
  • 从区域点到新区域的连接角度大于某个阈值。

答案 1 :(得分:0)

我终于找到了解决方案:

  1. 确定点是在轮廓内/外:

    • 我将网格中的每个点以及轮廓投影到z = 0平面上,从而减少了问题的维数(从3-D到2-D)
    • 我构造了一个与我的轮廓相对应的多边形(2-D)。然后我使用光线投射see Wikipedia
    • 应用了“多边形点”测试
  2. 仅取“外”表面上的点:我取平均轮廓法线,然后将其与已标记为轮廓内部的每个点的法线进行比较(上一步)。如果angle(normal_vertex,normal_contour)>阈值(在我的情况下为60º)然后我将顶点标记为轮廓外。

  3. 此时算法按预期工作。 谢谢, 米格尔