这是android上最好的线平滑算法



我想画一条更平滑的线,我通过触摸得到点。这条线是一幅画,但是有角。我用四次函数来画曲线,但是当点彼此靠近时,曲线有时会有角。我们可以做些什么来解决这个问题?

我之前故意没有回答这个问题,因为你正在使用Android API和Quad功能,我认为会有一种方法来增加no。它所画的二次贝塞尔曲线上的点的个数。我在谷歌上搜索了一下,并没有找到任何东西,但我一直在等待有人发布一个使用Android API的技巧。

似乎平滑度必须通过使用代码绘制更高分辨率的贝塞尔曲线来手动实现:四次函数画的是二次贝塞尔曲线,这里有一个很好的算法链接来画贝塞尔曲线,你所要做的就是增加no。曲线上的点:二次Bezier曲线公式为:

[x,y]=(1 - t) 2P0 + 2(1 - t)tP1 + t2P2

'并且你必须使t变小以使循环迭代更多,所以会有更多的点,你将能够画出更平滑的曲线。

下面是有趣的代码(我稍微改变了一下,使我更容易解释):

double t = 0;
Point prevPoint = CalculateBezierPoint(t, p0, p1, p2, p3);
for(int i = 0; i <= 100; i++)
{
  Point nextPoint = CalculateBezierPoint(t, p0, p1, p2, p3); //see this part from the link i have given
  //Draw line from previous point to next point.
  prevPoint = nextPoint;
  t = t + (1/100)    
}

为了使曲线更平滑,增加for循环中的段数(1000等,实验它),也改变这条线t = t + (1/100)(将值除以较大的no)。在你选择的片段中,I

使用这个解决方案作为最后一个选择,如果你找到一种方法来做它使用Android API,请张贴在这里,如果别人有办法做到这一点,请张贴,我正在等待答案。

最新更新