其实这种问题是数学上的问题,没有必要在大富问,正好我手里有我所做的程序,正好
贴出来:
FUNCTION QJABC(A1,B1,C1,A2,B2,C2:REAL;VAR X,Y:REAL):BOOLEAN;
//该函数求二条直线的交点,直线1的参数为A1,B1,C1,直线2的参数为A2,B2,C2
//交点为X,Y,如果两直线无交点,则返回值为FALSE
BEGIN
IF ((ABS(A1)<EX) AND (ABS(A2)<EX)) OR ((ABS(B1)<EX)AND(ABS(B2)<EX))
OR ((ABS(A1)<EX) AND (ABS(B1)<EX)) OR ((ABS(A2)<EX) AND (ABS(B2)<EX)) THEN
BEGIN
QJABC:=FALSE;
EXIT
END;
IF ABS(A1)<EX THEN
BEGIN
Y:=(0-C1)/B1;
X:=(0-C2-B2*Y)/A2;
END
ELSE
IF ABS(B1)<EX THEN
BEGIN
X:=(0-C1)/A1;
Y:=(0-C2-A2*X)/B2
END
ELSE
IF ABS(A2)<EX THEN
BEGIN
Y:=(0-C2)/B2;
X:=(0-C1-B1*Y)/A1
END
ELSE
IF ABS(B2)<EX THEN
BEGIN
X:=(0-C2)/A2;
Y:=(0-C1-A1*X)/B1
END
ELSE
BEGIN
if abs(a2*b1-a1*b2)<ex then
begin
qjabc:=false;
exit
end;
y:=(a1*c2-a2*c1)/(a2*b1-a1*b2);
x:=(0-c1-b1*y)/a1;
end;
qjabc:=true;
END;
function sqppp(PP,PP1,PP2:TPoint;VAR X,Y,R:REAL):boolean;
//过任意三点作圆,如成功返回TRUE否则返回FALSE;
var a,b,c,d,e,f,g,h,i,j:real;
begin
a:=pp2^.x+pp1^.x;
b:=pp2^.x-pp1^.x;
c:=pp2^.y+pp1^.y;
d:=pp2^.y-pp1^.y;
e:=pp^.x+pp1^.x;
f:=pp^.x-pp1^.x;
g:=pp^.y+pp1^.y;
h:=pp^.y-pp1^.y;
i:=(0-A*B-C*D)/2;
j:=(0-E*F-G*H)/2;
if not qjabc(b,d,i,f,h,j,x,y) then
begin
Result:=false;
exit
end;
R:=Sqrt((X-PP^.X)*(X-PP^.X)+(Y-PP^.Y)*(Y-PP^.Y));
Result:=True;
end;