从(Wacom)笔数据数组中绘制网页中的平滑曲线

时间:2016-05-14 23:34:29

标签: javascript curve bezier wacom

我需要在网页上绘制曲线以响应Wacom Pen生成的数据。所以JavaScript将收到一组x,y,压力数据。

我可以加入点,但我想让它无鳞。因此,即使您放大查看单个字形,它仍然看起来很好。

我想象以某种方式平滑数据。因此,如果原始数据是...(10,5)(11,6)(12,6)(13,6)(14,5)那么在平滑后它可能看起来像(10,5.8)(11,5.95) )(12,6.15)(13,5.7)(14,5.2)等等当然取决于间隔之外发生的事情。

我可以通过在点之间放置弹簧并设置张力来做到这一点。在一次通过中,每个点都会被拉向对齐。我可以将后续10次通过中的每一次减少10%的张力。

或者某种低通滤波:pt_out [n] = .9 * pt_out [n-1] + .1 * pt_in [n]

我需要小心确定一个动作开始和停止的位置,这样它就不会试图在笔不在纸上的点上进行平均。

一旦我对平滑点数据感到满意,我想我可以为每个点构造一个垂直向量并创建一个左点和右点说3px(如果我想要一个6px画笔)在+和 - 方向。

然后我可以从这些左右点构造一个三角形条带并使用GL来渲染。

但我猜这必须解决问题。我不想重新发明轮子。我会问这里,以防有人在那里解决类似的问题。

1 个答案:

答案 0 :(得分:0)

我认为平滑数据点不会完全解决您的问题。如果您仍然通过用直线连接平滑的数据点来绘制曲线,则当您放大到足够近时,曲线看起来仍然是锯齿形的。

如果可以使用SVG渲染曲线,则可以使用SVG路径,该路径能够绘制二次或三次贝塞尔曲线。当然,您必须从数据点计算Bezier曲线的控制点,这可以通过Catmull-Rom样条曲线完成。