原理
- 使用4段三阶贝赛尔曲线模拟圆弧
- 每段曲线的中点落在圆弧上
分析
-
三阶贝赛尔曲线方程
-
曲线绘制示意图
- 我们可以确定的有:
起点:A(1, 0)
终点:B(0, 1)
两个控制点分别落在直线y=1和x=1上(AB两点的切线上),假设为A'(1, c) B'(c, 1)两点
这里强制增加一个条件,圆弧终点(0.707, 0.707)落在贝赛尔曲线上 - 代入方程:
得到c=0.5523
绘制
代码:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawLine(0, P.y, screenWidth, P.y, paintLine); canvas.drawLine(P.x, 0, P.x, screenHeight, paintLine); canvas.drawPoint(P.x + R, P.y - R * C, paintPoint); canvas.drawPoint(P.x + R * C, P.y - R, paintPoint); path.moveTo(P.x + R, P.y); path.cubicTo(P.x + R, P.y - R * C, P.x + R * C, P.y - R, P.x, P.y - R); canvas.drawPath(path, paintBezier); }
-
效果图如下: