我一直在网上寻找一种算法,该算法使您能够创建 2D 多边形的细节层次 (LOD) 表示,但找不到任何合适的参考。也许我使用了错误的搜索词,但所有搜索结果都是针对 3D LOD 算法的,我猜这不能(?)真正应用于 2D。
我敢肯定,在 3D 图形的冲击之前,很多人会研究 2D LOD 算法。任何线索或指示我可以在哪里获得更多信息?谢谢!
我一直在网上寻找一种算法,该算法使您能够创建 2D 多边形的细节层次 (LOD) 表示,但找不到任何合适的参考。也许我使用了错误的搜索词,但所有搜索结果都是针对 3D LOD 算法的,我猜这不能(?)真正应用于 2D。
我敢肯定,在 3D 图形的冲击之前,很多人会研究 2D LOD 算法。任何线索或指示我可以在哪里获得更多信息?谢谢!
除了从多边形中获取每个第 N 个顶点(将顶点数减少 N)的明显最愚蠢的算法之外,这里还有一个受一些 3D 算法启发的想法。
通常,在 3D 中,需要移除对整体体积贡献较小的面。为此,我们尝试简化模型的“最平坦”区域。
现在在 2D 中,您可以将其转换为“简化它们之间夹角最小的线段。第一个简单的实现可能是:
当然,这不是最优的,但它应该是质量和速度之间的良好折衷。您可以取两个线段 (Pi+1) 的中点与可能简化的线段 ([Pi, Pi+2]) 之间的最小距离,而不是角度
编辑:
如果我不需要太多性能,我会尝试另一种算法:
最后,我在该链接上为您找到了一些源代码:http: //motiondraw.com/md/as_samples/t/LineGeneralization/demo.html,以及相关的算法:http://www.geom.unimelb。 edu.au/gisweb/LGmodule/LGSimplification.htm
搜索Douglas-Peucker 算法,该算法用于简化折线,但可以扩展以支持多边形。这是我用过的。如果需要,还有拓扑稳定的扩展。