【问题标题】:How to convert binary tree to polygon triangulation and vice versa如何将二叉树转换为多边形三角剖分,反之亦然
【发布时间】:2014-11-29 17:34:59
【问题描述】:

根据wikipedian - 2 个节点的二叉树与简单的n-vertex 多边形三角剖分之间存在双射(1:1 对应)。我想知道,如何相互转换*?
换句话说,如何将三角形集合转换为二叉树以及如何将二叉树转换为三角形集合?三角形是顶点的 ccw 三元组 (v0, v1, v2) 并链接相邻三角形 (n0, n1, n2)。
* 从程序员的角度来看,算法,代码示例等。

【问题讨论】:

    标签: algorithm binary-tree polygon triangulation


    【解决方案1】:

    这是一个递归双射。

    基本情况是退化的 2 顶点多边形对应于空树。

    归纳地,这棵树至少有一个内部节点。假设多边形的顶点具有按顺时针顺序从 1 到 n 的预先存在的标签。检查包含边 12 的唯一三角形 T。

       1-----2
      /|    /|\
     / | T / | \
    6  |  /  |  3
     \ | /   | /
      \|/    |/
       5-----4
    

    如果我们删除 T,我们会得到两个三角形多边形。在这种情况下,我们得到 2345 和 156。递归地对包括 1 的多边形进行双射以获得根的左子树。递归地对包含2的多边形进行双射得到根的右子树。

    查看这种双射的一种特别巧妙的方法是,我们通过取三角剖分的平面对偶图、删除与无限面相交的边并将与 12 相邻的面指定为根来导出树。

    【讨论】:

    • 感谢您的帖子,我刚刚意识到 - 三角形的集合已经 二叉树。如果我们将 n0 提升到左子链接,将 n1 提升到父链接,将 n2 提升到右子链接,总有一种方法可以移动子三角形顶点(和相邻链接),使其满足上述条件。假设约定 n0 与 v0 相反。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2015-03-19
    • 2011-07-12
    • 2011-01-14
    • 2020-08-15
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多