I want to make a smoother line which I draw by getting the points on touch. The line is a drawing, but with corners. I am using quad function to draw the curve, but the curve sometimes has corners in it when the points are near to each other. What could be done to figure out the solution for this problem?
问问题
1047 次
1 回答
1
我之前故意没有回答这个问题,因为你使用的是Android API和Quad函数,我认为有一种方法可以增加no。它正在绘制的二次贝塞尔曲线中的点数。我做了一个谷歌,并没有自己找到任何东西,但我正在等待有人使用 Android API 发布一个技巧。
似乎必须通过使用代码绘制更高分辨率的贝塞尔曲线来手动实现平滑度: Quad function is drawing the Quadratic Bezier Curve,这里是一个很好的链接算法来绘制贝塞尔曲线,你所要做的就是增加没有。曲线中的点数:二次贝塞尔曲线的公式是:`
[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 的方法,也请在此处发布,如果其他人有方法,请发布,我正在等待答案。
于 2011-10-07T18:42:12.620 回答