jus*_*tin 15 bezier vector paint vector-graphics computational-geometry
我在Actionscript中创建了一个绘图应用程序(虽然我的问题不是与Actionscript相关).基本思想是在按下鼠标时开始绘画并跟踪鼠标移动.我想要的是:
现在,(1)是有问题的,因为我在几秒钟内就能获得数千个鼠标移动.由于(1)线条看起来很锯齿.当前的想法:当用户完成绘制线时,我将所有移动存储在一个数组中并减少它们(中位数阈值),然后使用样条算法重新创建一条线.
有更好的方法吗?
lhf*_*lhf 11
参见Sarah Frisken的Efficient Curve Fitting.也可在作者的页面上找到.
(在寻找同样的问题时碰到了你的问题,碰巧把我们自己的东西放在一起)
http://willowsystems.github.com/jSignature/#/about/linesmoothing/
(与SEO兼容的链接:http: //willowsystems.github.com/jSignature/%2523%252Fabout%252Flinesmoothing%252F.html)
您描述的问题是双重的.1.您想要"简化"捕获数据.2.你想在点内绘制一个漂亮的线条("适合曲线").
上面引用的Simplify.js确实很好,但它只给你积分.对于jSignature,我们想要一种超高效,非滞后的曲线拟合算法.
请参阅上面的链接,了解一个(我们的)拟合方法(Bezier aka'cubic')点之间的曲线.它允许您保持用户绘制的线条,并且只是在连接最后2个坐标时滞后,或者您可以简化并重绘整条线.
(我们的算法的公布是故意的,以建立"现有技术",并排除相结合的方法的petentability.这意味着,我们不能把我们自己的专利枷锁的算法,搜索硬盘,并没有发现它是在其他地方获得专利.当然可能会有一些专利巨头可能会发现你实施这个方法的问题,但至少不是我们.所以,享受.)
演示链接在鼠标移动时使用4像素跳过.这很粗糙,但可以实现数据的实时"简化".如果您能够捕获整个笔划并重新绘制所有笔划,那么请使用simplify.js.