我正在开发一个应用程序,可以记录使用指向设备绘制的笔画。
在上图中,我画了一条包含453个数据点的单一笔画。我的目标是大幅减少数据点数量,同时仍保持原始笔画的形状。
对于那些感兴趣的人,上面图片中的笔画坐标可在GitHub上的gist中找到。
事实上,Adobe Illustrator具有我想要实现的很好的功能。如果我在Illustrator中使用类似的笔画(使用书法笔刷),则生成的形状将简化为下面我们看到的内容。在绘制笔画时,它会与我的应用程序中的笔画非常相似。释放鼠标按钮后,曲线将简化为以下形式:
如我们所见,该笔画只有14个数据点。尽管还有其他控制点来定义贝塞尔样条(或他们使用的任何样条)的倾斜度。这里我们可以看到其中一些控制点:
我查看了像Ramer-Douglas-Peucker算法这样的算法,但是它们似乎只从输入集中删除点。如果我没有弄错,我要寻找的方法也必须向输入集中引入新点才能实现所需的曲线。
我看到了类似iPhone光滑素描绘图算法的问题,但这些问题似乎专注于从少量输入点创建平滑曲线。我感觉我正好相反。
List<Point>
,其中按记录顺序填充了坐标。 - Oliver Salzburg