哪个是适用于安卓的最佳线条平滑算法?

3

我希望能够通过获取触摸点来绘制更平滑的线条。

这条线是一种绘画,但是有很多拐角。我正在使用quad函数来绘制曲线,但是当点接近时,曲线有时会出现拐角。有什么方法可以解决这个问题?

1个回答

1

我故意没有早回答这个问题,因为你正在使用Android API和Quad函数,我认为应该有一种方法可以增加绘制的二次贝塞尔曲线上的点数。我通过谷歌搜索没有找到任何东西,但我在等待有人发布使用Android API进行技巧操作的帖子。

看起来平滑度必须通过手动绘制更高分辨率的Bezier曲线来实现,使用代码: Quad函数正在绘制Quadratic Bezier Curve 这里是一个很好的绘制Bezier曲线算法的链接,你需要做的就是增加曲线上的点数: 二次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)(将该值除以您选择的更大段数,即i)。
如果您找到使用Android API的方法,请在此处发布,将其作为最后一种选择。如果其他人有方法,请发布,我正在等待答案。

谢谢您的帖子,但就我所检查的情况而言,我的问题是更多的点而不是更少的点。如果我根据某些算法减少点数,那么我的线条将会更加平滑。这将避免出现角落。我使用了道格拉斯-普克算法,但它并没有让我满意。我正在寻找更多的算法。以下链接对我来说是一点希望。让我们看看它是否有帮助。我正在努力理解它。[链接]http://www.12inchpianist.com/line-smoothing-in-java - Jawad Amjad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接