【问题标题】:Find vertices not surrounded by faces查找未被面包围的顶点
【发布时间】:2020-09-05 05:14:45
【问题描述】:

我正在使用粗略表示为的网格

{
   vertices: [{
      x: number,
      y: number,
      z: number
   }, ...],
   faces: [{
      verticeIndices: [number, number, number]
   }, ...]
}

现在给定一个顶点,我想知道这个顶点是否被面包围。问题是我什至不知道从哪里开始。看起来会很简单(因为在可视化网格时,很容易知道顶点是否被面包围),但我不知道如何表达。

所以这里有一个 2D 的示例图片:

很容易看出涂成绿色的顶点没有被面包围 - 如果我们要连接左下角的两个顶点,那么中间那些旁边的那个会变成红色。

在这种 2D 情况下(可能更简单?)我想象的唯一方法是:

  1. 找到所有相邻的面。
  2. 找出每个面在该顶点上的角度。
  3. 如果加起来是 360,则全部覆盖,否则不覆盖。

但我认为在 3D 中工作时这并不能真正成立...有没有一种简单的方法可以确定顶点是否被 3D 中的面包围?

【问题讨论】:

    标签: 3d geometry mesh


    【解决方案1】:

    我刚刚找到了一个可能的答案,但我想看看是否有更简单的方法:

    还有另一种方法可以在 2D 中找到缩放到 3D:

    1. 找到目标顶点的相邻顶点。
    2. 制作仅包含这些顶点(且不包含目标顶点)的图
    3. 查看该图是否有循环。

    如果所有相邻的顶点都形成一个循环,那么这意味着该顶点被包围(如果我没有错并且我错过了一个边缘情况)

    看起来这应该缩放到 3D。

    如果有人有其他更好的想法,我会保留这个问题。

    【讨论】:

      【解决方案2】:

      如果顶点上的相邻边之一是边界边,则该顶点不被面包围

      边界边仅在一个面上相邻,而内部边在两个面上相邻。 (有时会超过 2 个,当出现非流形时。)

      要使用此信息,您需要访问顶点周围的边。

      如果您还没有听说过half edge data structure,您可能想看看this introduction

      如果访问顶点周围的边缘并不容易,您的方法将非常有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-13
        • 1970-01-01
        • 1970-01-01
        • 2020-07-30
        • 1970-01-01
        • 2019-06-10
        • 1970-01-01
        • 2023-03-20
        相关资源
        最近更新 更多