【Android】自定义View绘制弧线,是否可以指定起点、终点、半径直接绘制?

新手上路,请多包涵

Canvas.drawArc()Path.arcTo()都只能通过指定对应圆的边界和圆弧对应的角度来绘制圆弧。
是否可以只通过指定圆弧的起点、终点坐标和半径(曲率)直接绘制弧线?

image.png

比如上图中,已知A、B、C点的坐标和给定的曲率 1/r,是否有API可以直接画出弧AB?而不需要求出对应圆的边界、角度参数?还是只能自己计算呢?

阅读 2.7k
1 个回答
新手上路,请多包涵

来自:https://stackoverflow.com/que...

    @Throws(Exception::class)
    fun Path.arcFromTo2(
        x1: Float, y1: Float, x2: Float, y2: Float, r: Float,
        clockwise: Boolean = true, forceMoveTo: Boolean = false
    ) {
        // 1. calculate circle center
        val d = PointF((x2 - x1) * 0.5F, (y2 - y1) * 0.5F)
        val a = d.length()
        if (a > r) throw Exception()

        val side = if (clockwise) 1 else -1

        val oc = sqrt(r * r - a * a)
        val ox = (x1 + x2) * 0.5F - side * oc * d.y / a
        val oy = (y1 + y2) * 0.5F + side * oc * d.x / a

        // 2. calculate angles
        val startAngle = atan2(y1 - oy, x1 - ox) * 180F / Math.PI.toFloat()
        val sweepAngle = side * 2.0F * asin(a / r) * 180F / Math.PI.toFloat()

        arcTo(ox - r, oy - r, ox + r, oy + r, startAngle, sweepAngle, forceMoveTo)
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题