【问题标题】:Polygon Partitioning vs Triangulation多边形分区与三角剖分
【发布时间】:2011-10-05 20:05:18
【问题描述】:

我最近问this question关于如何将凹多边形切割成凸多边形,有人建议我进行三角剖分或多边形分区。

我使用的库 (SFML\Box2D) 只采用凸形。

这是我想知道的:

  1. 多边形分区或多边形三角剖分是否更快?

  2. 多边形分区是如何工作的/你是如何做到的?


不要忘记三角剖分也不需要制作凸形......

【问题讨论】:

    标签: c++ math graphics triangulation convex-polygon


    【解决方案1】:

    不是您问题的完整答案,但如果您有一个通用多边形(凹面、凸面等)并且您希望对其进行三角剖分(可能用于后续的 openGL 样式渲染),您可以查看“受约束的 Delaunay 三角剖分”包.一个这样的例子是 Triangle 包,它被认为是快速和健壮的。

    据我了解,Triangle 中使用的算法表现出O(nlogn) 运行时复杂度。

    【讨论】:

    • 我只是想知道你是否知道它是否更快,如果你不知道,我会把它放回去。
    • Triangle 的运行时复杂度为O(nlogn),通常渐近地相当快。如果您能找到O(n) 算法,那么显然这可能会更快,但我不知道此类中有任何算法。也许检查一下code.google.com/p/polypartition 并比较报告的复杂性。要实际上找到您需要进行基准测试的最快方法,并获得一些真实的计时结果...
    • 另一个考虑因素是三角剖分质量,因为可以为给定的多边形生成许多有效的三角剖分。基于 Delaunay 的算法(例如三角形)在某种意义上是最优的,因为它构建了最大化最小角度的三角剖分。
    • 您提供的指向 PolyPartition 库的链接看起来非常有趣/有用!那里没有指南吗?我现在正试图从源代码中弄清楚。
    【解决方案2】:

    多边形分割将您的多边形分割成凸多边形。
    三角剖分将其分成三角形。 据我了解,分割成三角形需要您首先执行多边形分割,因为将凸多边形分割成三角形相对来说是微不足道的。
    将多边形分割成凸多边形是困难的部分。 我已经编写了一个程序,它既可以用于课堂,也可以根据需要进行挖掘。

    这是我的代码: https://github.com/meshko/triangulator/tree/master/som

    我已经 10 年没碰过所以要小心。

    【讨论】:

    • 那太好了!请做 =)
    • @MK:您可以直接对凹多边形进行三角剖分,尽管对凸多边形进行三角剖分可能更容易......
    • @Griffin 我已经用代码链接更新了答案。祝你好运。
    • @MK:所以在 readme.txt 中你说“算法由两个阶段组成:第一个多边形被分成单调多边形,然后每个单调多边形在线性时间内被三角剖分。”我知道如何做到这一点,那么任何来源实际上是否将多边形划分为凸形?
    • 嗯...我猜它没有。抱歉,混淆了凸和单调:(
    猜你喜欢
    • 1970-01-01
    • 2012-09-28
    • 2015-03-19
    • 1970-01-01
    • 2011-01-14
    • 2011-07-15
    • 1970-01-01
    • 2011-01-24
    • 2018-08-22
    相关资源
    最近更新 更多