Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Canvas 如何以非锯齿方式绘制由多条线段组成的曲线_Canvas_Javafx_Bezier - Fatal编程技术网

Canvas 如何以非锯齿方式绘制由多条线段组成的曲线

Canvas 如何以非锯齿方式绘制由多条线段组成的曲线,canvas,javafx,bezier,Canvas,Javafx,Bezier,我试图写一个程序,把传入的USB数据放在一个折线图上。我这样做的方式是在画布上绘制一组连接所有数据点的直线。问题在于生成的线不平滑,如下所示: 我尝试使用Graphics Context的lineTo(x,y)方法,但这只会让情况变得更糟。我还尝试更改线帽和线连接参数,但没有多大帮助 有没有更好的方式在JavaFX图形上下文中播放“连接点”的游戏?也许是贝塞尔曲线?如果有,请让我知道。我最终找到了解决问题的最简单方法,就是使用BoxBlur效果: BoxBlur blur = new BoxB

我试图写一个程序,把传入的USB数据放在一个折线图上。我这样做的方式是在画布上绘制一组连接所有数据点的直线。问题在于生成的线不平滑,如下所示:

我尝试使用Graphics Context的
lineTo(x,y)
方法,但这只会让情况变得更糟。我还尝试更改线帽和线连接参数,但没有多大帮助


有没有更好的方式在JavaFX图形上下文中播放“连接点”的游戏?也许是贝塞尔曲线?如果有,请让我知道。

我最终找到了解决问题的最简单方法,就是使用BoxBlur效果:

BoxBlur blur = new BoxBlur();
blur.setWidth(2);
blur.setHeight(2);
blur.setIterations(1);

gc.setEffect(blur);

 ...

//Don't forget to remove the effect before clearing
gc.setEffect(null);
gc.clearRect(0, 0, width, height);

这不是一个精确的解决方案,但对我来说效果很好。

您考虑过使用内置的折线图吗?我不认为Canvas包含对抗锯齿线的本机支持(请参阅重复问题)。如果您在场景图上而不是画布上绘制线条,则支持抗锯齿,因此,也许您可以尝试。嗯,这实际上表明,在将线条等形状基本体绘制到画布上时确实会发生抗锯齿。因此,如果您像最初设想的那样使用,可能最终会获得更好的结果。您可以尝试此处引用的算法将曲线拟合到点:(这是基于场景图的,因此您需要根据基于画布的解决方案对其进行调整)。@jewelsea也许我错了,但我不认为这是GC而不是抗锯齿的问题。这条曲线是由我画的一堆细小的线组成的,据我所知,这些线是不相连的。