//直线和圆的交点
procedure P_zhixianheyuan(const x1, y1, x2, y2, x3, y3, r: double; var Solx1, Solx2, Soly1, Soly2: double);
var
k, a, b, c, delta: double;
begin
k := (y2 - y1) / (x2 - x1);
a := 1 + k * k;
b := -2 * (x3 - k * y1 + k * k * x1 - y3);
c := x3 * x3 + (y1 - k * x1 - y3) * (y1 - k * x1 - y3) - r * r;
delta := b * b - 4 * a * c;
if delta < 0 then
begin
//ShowMessage('无交点');
Exit;
end
else if delta > 0 then
begin
Solx1 := (-b + sqrt(delta)) / 2 / a;
Solx2 := (-b - sqrt(delta)) / 2 / a;
Soly1 := k * (Solx1 - x1) + y1;
Soly2 := k * (Solx2 - x1) + y1;
end
else if delta = 0 then
begin
Solx1 := (-b) / (2 * a);
Soly1 := k * (Solx1 - x1) + y1;
Solx2 := Solx1;
Soly2 := Soly1;
end;
end;