Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 二维细节层次(LOD)算法_Algorithm_2d_Polygon_Computational Geometry_Level Of Detail - Fatal编程技术网

Algorithm 二维细节层次(LOD)算法

Algorithm 二维细节层次(LOD)算法,algorithm,2d,polygon,computational-geometry,level-of-detail,Algorithm,2d,Polygon,Computational Geometry,Level Of Detail,我一直在网上搜寻一种算法,它可以让你创建2D多边形的细节层次(LOD)表示,但我找不到任何合适的参考。也许我使用了错误的搜索词,但是所有的搜索结果都是针对3D LOD算法的,我想,这不能(?)真正应用于2D 我相信在3D图形的冲击之前,很多人都会研究2D LOD算法。有什么线索或指示我可以在哪里获得更多信息吗?谢谢 除了显而易见的最愚蠢的算法,即从多边形中每隔N个顶点取一个顶点(将顶点数减少N个),这里还有一个受一些3D算法启发的想法 通常,在3D中,需要删除对整体体积贡献较小的面。为此,我们尝

我一直在网上搜寻一种算法,它可以让你创建2D多边形的细节层次(LOD)表示,但我找不到任何合适的参考。也许我使用了错误的搜索词,但是所有的搜索结果都是针对3D LOD算法的,我想,这不能(?)真正应用于2D


我相信在3D图形的冲击之前,很多人都会研究2D LOD算法。有什么线索或指示我可以在哪里获得更多信息吗?谢谢

除了显而易见的最愚蠢的算法,即从多边形中每隔N个顶点取一个顶点(将顶点数减少N个),这里还有一个受一些3D算法启发的想法

通常,在3D中,需要删除对整体体积贡献较小的面。为此,我们尝试简化模型的“最平坦”区域

现在在2D中,您可以将其转化为“简化它们之间具有最小角度的线段。第一个天真的实现可能是:

  • 计算多边形线段Si和Si+1之间的所有角度
  • 取给定阈值以下的所有角度(或取M个最小角度)
  • 简化我们在2中确定的分段。(将[Pi,Pi+1]和[Pi+1,Pi+2]替换为[Pi,Pi+2])
  • 从1开始重复,直到我们充分缩小多边形
  • 当然,这不是最优的,但它应该是质量和速度之间的一个很好的折衷。您可以采用两个线段的中点(Pi+1)和可能简化的线段([Pi,Pi+2])之间的最小距离,而不是角度

    编辑:

    如果我不需要太多性能,我会尝试另一种算法:

  • 将原始多边形顶点视为Catmull Rom样条曲线的控制点
  • 在所需的点数处细分此样条曲线

  • 最后,我在该链接上为您找到了一些源代码:,以及相关的算法:

    搜索用于简化多段线,但可以扩展以支持多边形。这就是我所使用的。如果您需要,还可以使用拓扑稳定的扩展。

    有趣的是,可能正在寻找形状简化、图像简化抽象甚至压缩?LOD的要求是什么?图像是否会缩小?是为了性能,还是为了节省内存或模拟深度?我正在考虑改善现有(遗留)图像的性能算法。本质上,我想要一个合理的多边形“收缩包装”近似值,其中保留了主要的外部特征,隐藏了内部细节。建议的关键字+1。感谢!+1让我知道这个很酷的算法。这可能行得通,但我必须在我的上下文中检查它。这是我正在做的一件事issed在问题中提到了这一点,但我不知道如何准确地用语言来解释,但请看我对上面主要问题的评论。谢谢你的建议。我认为我将能够使用你建议的算法和上面Juraj建议的算法的组合来实现类似于我想要的东西。+1.不幸的是,我不能请确认两个答案都正确,因此将这一个标记为正确,但Juraj建议的“道格拉斯-佩克算法”同样好。是的,我不知道拉姆-道格拉斯-佩克算法,但我喜欢它。好的一面是,例如,当你达到最大点数时,你可以轻松停止。