我正在尝试实现折线简化算法。原文可以在这里找到:http://archive.is/Tzq2。它在概念上似乎很简单,但我不理解提供的伪代码的示例算法(我认为它的措辞很差)并且希望有人可以提供一些见解。从文章中我收集到的基本想法是
算法如下(从文章中逐字复制):
我对'REPEAT'下第一步中的'if'条款感到困惑......有人可以澄清吗?
答案 0 :(得分:10)
FWIW d3.js的创建者Mike Bostock写了一个严格的javascript实现这个算法(Visvalingam的算法)。
答案 1 :(得分:7)
算法的本质是按重要性对点进行排名。该点的重要性近似于其有效面积。
假设您已消除了A点,然后重新计算了B点的有效区域。新区域可能比旧区域大或更小。它可以小于A的有效面积。但是,算法仍然认为B比A更重要。
if
子句的目的是确保B点在最终列表中比A更重要,这就是全部。
答案 2 :(得分:1)
我也对此感到困惑,回过头来再读一遍这篇文章,如果你在去的时候删除积分,那就不需要 - 如果你是&# 39;用固定面积阈值重新进行一次性简化。因为javascript实现以这种方式工作,所以它实际上并不需要' if'声明(但无论如何它都有它,哦)。
' if'如果您保留所有要点,则需要声明 。在这种情况下,您需要存储有效区域'使用每个点以便稍后可以过滤它们,也许使用控制输出点数的交互式滑块。通过存储更大的有效区域,您可以保留正确的顺序。