【问题标题】:issue with Ramer–Douglas–Peucker algorithm while drawing a line画线时出现 Ramer–Douglas–Peucker 算法的问题
【发布时间】:2014-02-18 21:46:07
【问题描述】:

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

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

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

【问题讨论】:

  • 你能更详细地描述一下这个问题吗?曲线是否“跳跃”是因为用户绘制时算法给出的结果,比如十个点与用户绘制第十一个点时的结果不同?如果你能给出一个问题的直观例子,那会很有帮助。
  • 没错,一个新的点甚至可以改变第一个点。这是有道理的,因为每个新点都会改变距离,从而改变算法中的递归。我想知道是否有简单的方法可以绕过这个问题

标签: algorithm graphics


【解决方案1】:

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

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

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

这两种方法都有一个优势,即您在每个点上运行的算法不超过两次(在后一种情况下恰好一次),而如果您每次添加一个点时都运行该算法,那么您最终会运行它每次添加一个点时,在之前的每个点上,这可能会降低性能。

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-18
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 2018-08-27
      • 2016-05-19
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多