我正在尝试实现折线简化算法。原始文章可以在这里找到:http://archive.is/Tzq2 .它在概念上似乎很简单,但我不理解提供的示例算法(我认为它措辞不佳)伪代码,希望有人能提供一些见解。从这篇文章中,我了解到基本思想是
- 计算每个点的有效面积(由一条直线上三个连续点之间的三角形组成)并删除面积为0的那些
- 从最小面积开始,将点的面积与阈值进行比较,如果面积低于该阈值,则将其从多段线中删除。
- 移动到相邻的两个点,并在它们发生变化时重新计算它们的面积
- 回到2,直到阈值以下的所有点区域都被移除
算法如下(从文章中逐字复制):
- 计算每个点的有效面积 删除所有面积为零的点,并将它们存储在与该面积不同的列表中
- 重复
- 找到有效面积最小的点并将其称为当前点。如果它的计算面积小于最后一个要消除的点的面积,则使用后者的面积代替。 (这确保了当前点不能在不消除先前消除的点的情况下被消除。)
- 从原始列表中删除当前点并将其与其关联区域一起添加到新列表中,以便可以在运行时过滤该线。
- 重新计算两个相邻点的有效面积(见图 1b)。
- 直到
- 原线只有2个点,即起点和终点。
我对“REPEAT”下第一步中的“if”子句感到困惑...有人可以澄清一下吗?
最佳答案
FWIW Mike Bostock,d3.js 的创造者,写了这个算法(Visvalingam 的算法)的一个紧凑的 javascript 实现。
关于algorithm - Visvalingam-Whyatt 折线简化算法说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10558299/