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

发布于 2022-09-13 00:00:44 字数 300 浏览 29 评论 0

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

image.png

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

若水般的淡然安静女子 2022-09-20 00:00:44

来自: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)
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文