【发布时间】:2011-10-05 20:05:18
【问题描述】:
我最近问this question关于如何将凹多边形切割成凸多边形,有人建议我进行三角剖分或多边形分区。
我使用的库 (SFML\Box2D) 只采用凸形。
这是我想知道的:
多边形分区或多边形三角剖分是否更快?
多边形分区是如何工作的/你是如何做到的?
不要忘记三角剖分也不需要制作凸形......
【问题讨论】:
标签: c++ math graphics triangulation convex-polygon
我最近问this question关于如何将凹多边形切割成凸多边形,有人建议我进行三角剖分或多边形分区。
我使用的库 (SFML\Box2D) 只采用凸形。
这是我想知道的:
多边形分区或多边形三角剖分是否更快?
多边形分区是如何工作的/你是如何做到的?
不要忘记三角剖分也不需要制作凸形......
【问题讨论】:
标签: c++ math graphics triangulation convex-polygon
不是您问题的完整答案,但如果您有一个通用多边形(凹面、凸面等)并且您希望对其进行三角剖分(可能用于后续的 openGL 样式渲染),您可以查看“受约束的 Delaunay 三角剖分”包.一个这样的例子是 Triangle 包,它被认为是快速和健壮的。
据我了解,Triangle 中使用的算法表现出O(nlogn) 运行时复杂度。
【讨论】:
O(nlogn),通常渐近地相当快。如果您能找到O(n) 算法,那么显然这可能会更快,但我不知道此类中有任何算法。也许检查一下code.google.com/p/polypartition 并比较报告的复杂性。要实际上找到您需要进行基准测试的最快方法,并获得一些真实的计时结果...
多边形分割将您的多边形分割成凸多边形。
三角剖分将其分成三角形。
据我了解,分割成三角形需要您首先执行多边形分割,因为将凸多边形分割成三角形相对来说是微不足道的。
将多边形分割成凸多边形是困难的部分。
我已经编写了一个程序,它既可以用于课堂,也可以根据需要进行挖掘。
这是我的代码: https://github.com/meshko/triangulator/tree/master/som
我已经 10 年没碰过所以要小心。
【讨论】: