【问题标题】:Find border (boundary) edges of planar graph (geometric shape)查找平面图(几何形状)的边界(边界)边
【发布时间】:2012-04-22 06:29:58
【问题描述】:

我有描述平面几何形状(面是三角形)的顶点和边列表。例如:

   a_______b
   /|\    /
  / | \  /
e/__|__\/c
    d

Verts: a, b, c, d, e
Edges: (a,b), (a,c), (a,d), (a,e), (b,c), (c,d), (d,e)

这就是我所拥有的关于特定平面几何形状的所有信息。在此示例中,唯一的内部边缘是 (a,c) 和 (a,d)。所有其他边缘都是边界边缘。如何通过算法识别这些边界边缘(或反过来识别所有内部边缘)?

动机:如果有帮助,我正在尝试构建导航网格,其中一个步骤是构建可见性图,我认为第一步是识别边界边缘。

【问题讨论】:

    标签: graph find border edges


    【解决方案1】:

    我知道有点晚了。在 F.E.M.社区,我们计算每个三角形的边,然后边界是出现一次的边。如果它是用稀疏矩阵完成的(对我来说),它会非常快。

    【讨论】:

      【解决方案2】:

      对于平面图,“外表面”属性不是唯一的;您可以绘制图形以使任何面成为外部面,或者您甚至可以绘制图形以使其具有不同的面 - 考虑您的示例图形:

      也就是说,如果您知道可以绘制图形以使所有内部面都是三角形的,则可以扫描边列表并检查它们属于多少个三角形(通过检查相邻边)。如果边只属于一个三角形,则为外边。

      无论如何,我觉得很奇怪,您会知道图形具有这样的属性,但同时不知道各自的平面嵌入是什么。

      【讨论】:

      • 大约一个小时前我找到了那个解决方案。我确实在问题中提到面是三角形。我不会知道一切的原因是因为我基本上是在创建一个图形构建器。只要完成的图形是平面的并且所有面都是三角形,用户就可以将顶点放在他们喜欢的任何地方,并在任何他们喜欢的地方添加边。所以程序在任何时候都会知道顶点和边的列表。所以首先我必须建立人脸列表(三角形)。
      • 我想我可以查看一条边,获取所有相邻边,然后找到共享一个顶点而不是原始边的一部分的边对。我认为复杂性将基于图形的连通性,这应该不会太糟糕。有更好的想法吗?
      猜你喜欢
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 2016-06-18
      • 2011-03-06
      • 2013-04-30
      • 1970-01-01
      相关资源
      最近更新 更多