0

我想使用以下方法绘制弧线:.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);
4

1 回答 1

0

查看这个答案并找到一个点与中心的角度。

基于此,找到 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);
于 2013-04-15T11:40:11.730 回答