Vector 高效的线平滑和/或简化

Vector 高效的线平滑和/或简化,vector,paint,computational-geometry,bezier,vector-graphics,Vector,Paint,Computational Geometry,Bezier,Vector Graphics,我正在用Actionscript创建一个绘画应用程序(尽管我的问题与Actionscript无关)。基本思想是在按下鼠标时开始绘制,并跟踪鼠标移动。我想要实现的是: 减少鼠标“噪音”和 创建更平滑的线条 现在,(1)是个问题,因为我在几秒钟内就移动了数千次鼠标。由于(1)的原因,这条线可能会显得参差不齐。 当前的想法是:当用户完成绘制线时,我将所有移动存储在一个数组中,并减少它们(中值阈值),然后使用样条线算法重新创建一条线 有更好的方法吗?见莎拉·弗里斯肯。也可用。(在寻找相同的问题时遇到了您

我正在用Actionscript创建一个绘画应用程序(尽管我的问题与Actionscript无关)。基本思想是在按下鼠标时开始绘制,并跟踪鼠标移动。我想要实现的是:

  • 减少鼠标“噪音”和
  • 创建更平滑的线条 现在,(1)是个问题,因为我在几秒钟内就移动了数千次鼠标。由于(1)的原因,这条线可能会显得参差不齐。 当前的想法是:当用户完成绘制线时,我将所有移动存储在一个数组中,并减少它们(中值阈值),然后使用样条线算法重新创建一条线

    有更好的方法吗?

    见莎拉·弗里斯肯。也可用。

    (在寻找相同的问题时遇到了您的问题,并且碰巧拼凑了一些我们自己的东西)

    (SEO兼容链接到相同的: )

    你所描述的问题是双重的。 1.您希望“简化”捕获数据。 2.您希望在点内绘制一条好看的线(“拟合曲线”)

    上面引用的Simplify.js确实不错,但它只给了你一些分数。对于jSignature,我们想要一种超高效、无滞后的曲线拟合算法

    有关点之间拟合(Bezier又名“立方”)曲线的一种(我们的)方法的说明,请参见上面的链接。它允许您保留用户绘制的直线,只需延迟连接最后2个坐标,或者您可以简化并重新绘制整个直线,就像这样

    (我们发布算法是有意的,目的是建立“现有技术”这意味着,我们没有把我们自己的专利束缚在算法上,并且努力搜索,没有发现它在其他地方获得专利。当然,可能会有一些专利巨魔在那里发现你实施该方法的问题,但至少不是我们。所以,享受吧。)


    演示链接使用4像素鼠标移动跳过。这很粗糙,但对于数据的实时“简化”来说还可以。如果您有机会捕捉整个笔划并重新绘制所有笔划,当然可以使用simplify.js。

    Mike Bostock在这里有一些很好的例子。他指出,算法是众所周知的。但是似乎更有效。

    您提供的第一个链接似乎已断开。还有其他链接吗?@Aneem,请看和。我在理解向量距离场的部分时遇到了一些困难,您是否知道该代码是否有实现可供查看?这不是三菱实验室的专利吗?您是否有一个明确的算法示例?什么东西,可以要求4点,并返回一个安装贝塞尔?