algorithm - Visvalingam-Whyatt 折线简化算法说明

标签 algorithm polyline simplification

我正在尝试实现折线简化算法。原始文章可以在这里找到:http://archive.is/Tzq2 .它在概念上似乎很简单,但我不理解提供的示例算法(我认为它措辞不佳)伪代码,希望有人能提供一些见解。从这篇文章中,我了解到基本思想是

  1. 计算每个点的有效面积(由一条直线上三个连续点之间的三角形组成)并删除面积为0的那些
  2. 从最小面积开始,将点的面积与阈值进行比较,如果面积低于该阈值,则将其从多段线中删除。
  3. 移动到相邻的两个点,并在它们发生变化时重新计算它们的面积
  4. 回到2,直到阈值以下的所有点区域都被移除

算法如下(从文章中逐字复制):

  • 计算每个点的有效面积 删除所有面积为零的点,并将它们存储在与该面积不同的列表中
  • 重复
    • 找到有效面积最小的点并将其称为当前点。如果它的计算面积小于最后一个要消除的点的面积,则使用后者的面积代替。 (这确保了当前点不能在不消除先前消除的点的情况下被消除。)
    • 从原始列表中删除当前点并将其与其关联区域一起添加到新列表中,以便可以在运行时过滤该线。
    • 重新计算两个相邻点的有效面积(见图 1b)。
  • 直到
    • 原线只有2个点,即起点和终点。

我对“REPEAT”下第一步中的“if”子句感到困惑...有人可以澄清一下吗?

最佳答案

FWIW Mike Bostock,d3.js 的创造者,写了这个算法(Visvalingam 的算法)的一个紧凑的 javascript 实现。

关于algorithm - Visvalingam-Whyatt 折线简化算法说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10558299/

相关文章:

algorithm - 行简化算法 : Visvalingam vs Douglas-Peucker

algorithm - 最短路径的轻微不同解决方案

algorithm - 两个旋转矩形的交点面积

polynomials - 用分子中多项式的和来简化分数

javascript - 多条测地线折线上的动画符号

android - 折线宽度转换 map api v2

algorithm - 增量线简化

java - socks 商家问题: i am trying to do this with a different approach

algorithm - 如何用两个变量输入对一个变量的 PID 控制进行编程?

math - 如何创建没有自相交的平行多段线?