【问题标题】:How to reduce the number of points in a curve while preserving its overall shape?如何在保持曲线整体形状的同时减少曲线中的点数?
【发布时间】:2011-11-02 12:50:39
【问题描述】:

我有一个构成曲线的点列表,我想减少点的数量,但仍保持曲线的整体形状。

基本上,我想从这个开始:

到这里:

因此该算法将删除多余的点,但保留那些真正定义形状的点(例如曲线底部的点)。有没有已知的算法可以做到这一点?我希望有,但我不确定在 Google 上搜索什么。任何帮助将不胜感激。

【问题讨论】:

  • 我没有任何算法给你,但我们通常把这个过程称为vertex decimation。也许这对你的谷歌搜索有帮助。
  • 一个相当快的 numpy 实现可以在这里找到:stackoverflow.com/a/69026086/9801281

标签: algorithm graphics points curve simplify


【解决方案1】:

【讨论】:

  • 谢谢,我最终使用了 Douglas–Peucker 算法,效果很好。
  • @this.lau_ 你能分享一下这个算法的实现吗?
  • 你如何用这个算法来决定任意曲线的ε?
  • 这是 C# 的实现:stackoverflow.com/a/69705346/3225391
【解决方案2】:

有几种算法可以解决这个问题。

最简单的方法可能是继续删除相邻点之间的角度最接近 180 度的点,直到某个阈值,或者直到您达到所需的点数。

如果曲线像您的图片中那样平滑,您可能会通过使用贝塞尔曲线获得更好的近似值(或者如果您愿意,可以使用更少的点)。

【讨论】:

  • 谢谢,但我认为第一个建议对我不起作用,因为我的数据不像示例中那样干净。可能存在彼此非常接近的小点杂波,无论角度如何,都应将其减少为一个点。使用贝塞尔曲线可能会使问题变得更复杂而不是简化它,并使渲染速度变慢。
猜你喜欢
  • 1970-01-01
  • 2020-09-15
  • 2016-08-04
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2015-02-01
  • 1970-01-01
相关资源
最近更新 更多