我需要获取 n 个点的 2D 图并将其减少 r 个点(其中 r 是小于 n 的特定数字)。例如,我可能有两个总点数略有不同的数据集,比如 1021 和 1001,我想强制两个数据集都有 1000 个点。我知道几个简化算法:Lang Simplification 和 Douglas-Peucker。我在以前的项目中使用过 Lang,但要求略有不同。
我正在寻找的算法的具体属性是:
1) 必须保持线条的形状
2)必须允许我将数据集减少到特定数量的点
3)相对较快
这篇文章讨论了不同算法的优点。我将发布第二条关于 Java 或 Groovy 实现的建议(为什么要重新发明轮子)。
我担心上面的要求 2。我不是这些算法的专家,不知道我是否可以指定输出点的确切数量。我使用的 Lang 的实现将 lookAhead、tolerance 和 Points 数组作为输入,所以我看不到如何规定输出中的点数。这是我当前需求的关键要求。可能是因为我们之前使用过Lang的具体实现,但是我在网上没有看到很多关于Lang的资料。或者,我们可以使用 Douglas-Peucker,但我再次不确定是否可以指定输出中的点数。
我应该补充一点,我不是这些类型的算法或任何类型的数学专家的专家,所以我只是在寻找凡人类型的建议 :) 我如何满足上述要求 1 和 2?我会为正确的解决方案牺牲性能。