我一直在网上寻找一种算法,可以让你创建2D多边形的细节层次(LOD)表示,但我找不到任何合适的参考。也许我使用的是错误的搜索词,但所有的搜索结果都是针对3D LOD算法的,我猜,这些算法不能(?)真正应用于2D。
我相信在3D图形的冲击之前,许多人会研究2D LOD算法。有什么线索或指示我可以获得更多信息吗?谢谢!
答案 0 :(得分:4)
除了从多边形中取出每个第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
答案 1 :(得分:4)
搜索用于简化折线的Douglas-Peucker algorithm,但可以扩展为支持多边形。这是我用过的。如果您需要,还有拓扑稳定的扩展。