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