如何在画布上的两点之间绘制圆弧?

Raj*_*ddy 46 android ondraw android-canvas

我在画布上有两个点,现在我可以通过使用在这些点之间绘制一条线,如下图所示

这段代码 canvas.drawLine(p1.x, p1.y, p2.x, p2.y, paint); 在此输入图像描述

我想画两点之间的弧线,如下图所示.

在此输入图像描述

我怎么画这样的.

Raj*_*ddy 47

最后我从这段代码中得到了解决方案:

float radius = 20;
final RectF oval = new RectF();
oval.set(point1.x - radius, point1.y - radius, point1.x + radius, point1.y+ radius);
Path myPath = new Path();
myPath.arcTo(oval, startAngle, -(float) sweepAngle, true);
Run Code Online (Sandbox Code Playgroud)

要计算startAngle,请使用以下代码:

int startAngle = (int) (180 / Math.PI * Math.atan2(point.y - point1.y, point.x - point1.x));
Run Code Online (Sandbox Code Playgroud)

在这里,point1表示您要开始绘制Arc的位置.sweepAngle表示两条线之间的角度.我们必须通过使用像我的问题图像中的蓝点这样的两个点来计算.

  • sweeep_angle是什么意思? (5认同)
  • 你可以发布完整的解决方案吗? (2认同)

Adi*_*mro 19

做这样的事情:

@Override
protected void onDraw(Canvas canvas) {      
    Paint p = new Paint();
    RectF rectF = new RectF(50, 20, 100, 80);
    p.setColor(Color.BLACK);
    canvas.drawArc (rectF, 90, 45, true, p);
}
Run Code Online (Sandbox Code Playgroud)


j2e*_*nue 5

在此处输入图片说明首先我们需要可视化坐标在起始和扫掠角方面的情况,然后它会变得更加清晰。

所以如果你只想要圆的顶部,我们可以这样做:

 val rect = RectF(0f, 0f, 500f, 300f)
        val paint = Paint()
        paint.apply {
            strokeWidth = 5f
            setStyle(Paint.Style.STROKE)
            color = COLOR.BLUE
        }
         path.addArc(rect, 270f, 90f)
Run Code Online (Sandbox Code Playgroud)

..

这从 270 开始(根据上图,向前“扫掠”90 度。然后你就有了这个形状:

在此处输入图片说明

让我们再创建一个,以便您掌握它的窍门。这次让我们使用负值:我们要从右侧开始创建一个半月形(圆弧):

    path.addArc(rect, 0f, -180f)
Run Code Online (Sandbox Code Playgroud)

在这里,我们从 0 开始并“扫过”-180 度。结果是:

在此处输入图片说明