绘制圆弧的一部分

时间:2013-04-15 11:15:01

标签: android canvas geometry

我想使用以下方法绘制弧:.Canvas.drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

我在圆圈和圆心和半径上有两个点。

我究竟需要在椭圆形矩形中设置什么以及如何计算startAngle和sweepAngle?

我尝试了以下代码:

m_radiusRect.set(x1, Math.min(y1, y2), x2, Math.max(y1,y2));
float startAngle = (float)((Math.toDegrees( Math.atan2(x1 - 360.0, 360.0 - y1) ) + 360.0) % 360.0);
float sweepAngle = (float)((Math.toDegrees( Math.atan2(x2 - 360.0, 360.0 - y2) ) + 360.0) % 360.0) - startAngle;

canvas.drawArc(m_radiusRect, startAngle, sweepAngle, false, m_paint);

1 个答案:

答案 0 :(得分:0)

请参阅this回答并找到中心点的角度。

基于此,找到x1和x2的两个角度表示a1和a2。

然后,

sweepAngle = a2 - a1;
startAngle = a1;

<强>被修改

链接中给出的公式看起来不起作用,因为它不考虑中心。

这里的中心是(cx,cy)

float startAngle = (int) ((float) Math.toDegrees( Math.atan2(x1 - cx, y1 - cy)));
         float sweepAngle = (int) ((float) Math.toDegrees( Math.atan2(x2 - cx, y2 - cy))) - startAngle;

         Rect rect = new Rect();

         rect.left = (int) (cx - radius);
         rect.top = (int) (cy - radius);
         rect.right = (int) (cx + radius);
         rect.bottom = (int) (cy + radius);