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