#include <bits/stdc++.h>
using namespace std;

struct point {
    double x, y;
    point(double A, double B) {
        x = A, y = B;
    }
    point() = default;
};

struct line {
    point point_A, point_B;
    line(point A, point B) {
        point_A = A, point_B = B;
    }
    line() = default;
};

struct Circle {
    point O;
    int r;
    Circle(point A, int B) {
        O = A, r = B;
    }
    Circle() = default;
};

double Distance_point_line(const point& O, const line& L) {
    double a1 = L.point_A.x - L.point_B.x;
    double a2 = L.point_A.y - L.point_B.y;
    double b1 = O.y - L.point_A.y;
    double b2 = O.x - L.point_A.x;
    return abs(a1 * b1 - a2 * b2) / (sqrt(a1 * a1 + a2 * a2));
}

double getDistance(const Circle& circle, const line& l) {
    if (circle.r <= Distance_point_line(circle.O, l)) {
        return 0.0;
    } else {
        return 2.0 * sqrt(circle.r * circle.r - Distance_point_line(circle.O,
                          l) * Distance_point_line(circle.O, l));
    }
}

int main() {
    double ox, oy, r;
    double x1, y1, x2, y2;

    cin >> ox >> oy >> r;
    cin >> x1 >> y1 >> x2 >> y2;

    point center(ox, oy);
    Circle circle(center, (int)r);

    point p1(x1, y1);
    point p2(x2, y2);
    line l(p1, p2);

    double result = getDistance(circle, l);
    cout << fixed << setprecision(6) << result << endl;

    return 0;
}

求距离可以用点到直线的坐标公式求解,也可以使用叉乘理解。

S=∣x1​y2​−x2​y1​∣

后面就直观理解即可。