绘制线条时Ramer-Douglas-Peucker算法的问题

时间:2014-02-18 21:46:08

标签: algorithm graphics

我正在为iOS开发绘画应用程序并获得平滑的线条我应用了样本点的Ramer-Douglas-Peucker算法。

该算法适用于整个点矢量,结果随着点的增加而变化。它会导致结果曲线在用户绘画时“跳跃”。

这个问题是否有已知的解决方案?

2 个答案:

答案 0 :(得分:2)

我怀疑这完全可以避免,原因很简单:算法无法猜测未来的分数。

想象一下你画出前两点;显然你会保留它们。现在转到第三点。如果R-D-P告诉你丢弃中间点,你可能不会因为那会导致跳跃。等等。禁止跳跃意味着你不允许任何删除!

也许你可以通过绘制保持稳定的原始曲线和平滑曲线来减轻心理效应。

这就是说,R-D-P可能不是平滑的最佳方法。

答案 1 :(得分:1)

我从未实现或使用过这种算法,但我可以想到两种可能的解决方案:

  1. 将算法应用于线的离散部分。也就是说,等到用户绘制了10个点,然后在点0..9上运行算法。然后等待用户绘制下一个10点并在点10..19上运行算法,依此类推。一个可能的警告是它可以在10,20点等处创建副作用,但我真的不知道它是否会引起用户的注意。

  2. 等到用户完成绘图,然后在整行上运行算法一次。我之前在应用程序中看到过这种方法。

  3. 这两个方面都有这样的优势:你在每个点上运行的算法不超过两次(在后一种情况下只运行一次),而如果每次添加一个点都运行算法,你最终会运行它每次添加一个点时,每个上一个点都会有性能损失。

    就像我说的,这不是我的专业领域,但我希望它能给你一些想法。