* GEOMETRI Beräknar skärnings punkterna mellan två cirklar och en cirkel är placerad i Origo* UNIT Geometri; INTERFACE USES Math; PROCEDURE Circle (var r1,r2,a,b,x1,y1,x2,y2:Real); IMPLEMENTATION PROCEDURE Circle (var r1,r2,a,b,x1,y1,x2,y2:Real); {USES Math;} var slask:Real; n:Integer; begin n:=0; IF (a = 0) or (b = 0) THEN begin n:=2; if b=0 then begin b:=a;n:=1; end; x2:=-Sqrt(-(b*b)+2*(r1*r1)-(r1*r1*r1*r1)/(b*b)+2*(r2*r2)+(2*(r1*r1)*(r2*r2))/(b*b)-(r2*r2*r2*r2)/(b*b))/2; y2:=-(b+r1*r1/b-r2*r2/b)/2; x1:=-x2; y1:=y2; IF n = 1 THEN begin Slask:=x1; x1:=y1; y1:=Slask; Slask:=y2; y2:=x2; x2:=Slask; end; End; if n=0 then begin x2:= (-4*a - (4*r1*r1)/a + (4*r2*r2)/a + (4*b*b*r1*r1)/(a*(a*a + b*b)) - (4*b*b*r2*r2)/(a*(a*a + b*b)) - (b*Sqrt((b*b*Pw((4 + (4*r1*r1)/(a*a + b*b) - (4*r2*r2)/(a*a + b*b)),2) - 16*(a*a + b*b - 2*r1*r1 - 2*r2*r2 + (4*b*b*r1*r1)/(a*a + b*b) + r1*r1*r1*r1/(a*a + b*b) - (2*r1*r1*r2*r2)/(a*a + b*b) + r2*r2*r2*r2/(a*a + b*b))) ))/a)/8; y2:= (Pw((b*b*Pw((4 + (4*r1*r1)/(a*a + b*b) - (4*r2*r2)/(a*a + b*b)),2) - 16*(a*a + b*b - 2*r1*r1 - 2*r2*r2 + (4*b*b*r1*r1)/(a*a + b*b) + r1*r1*r1*r1/(a*a + b*b) - (2*r1*r1*r2*r2)/(a*a + b*b) + r2*r2*r2*r2/(a*a + b*b))), 0.5) - b*(4 + (4*r1*r1)/(a*a + b*b) - (4*r2*r2)/(a*a + b*b)))/8; x1:= (-4*a - (4*r1*r1)/a + (4*r2*r2)/a + (4*b*b*r1*r1)/(a*(a*a + b*b)) - (4*b*b*r2*r2)/(a*(a*a + b*b)) + (b*Sqrt((b*b*Pw((4 + (4*r1*r1)/(a*a + b*b) - (4*r2*r2)/(a*a + b*b)),2) - 16*(a*a + b*b - 2*r1*r1 - 2*r2*r2 + (4*b*b*r1*r1)/(a*a + b*b) + r1*r1*r1*r1/(a*a + b*b) - (2*r1*r1*r2*r2)/(a*a + b*b) + r2*r2*r2*r2/(a*a + b*b))) ))/a)/8; y1:= (-Pw((b*b*Pw((4 + (4*r1*r1)/(a*a + b*b) - (4*r2*r2)/(a*a + b*b)),2) - 16*(a*a + b*b - 2*r1*r1 - 2*r2*r2 + (4*b*b*r1*r1)/(a*a + b*b) + r1*r1*r1*r1/(a*a + b*b) - (2*r1*r1*r2*r2)/(a*a + b*b) + r2*r2*r2*r2/(a*a + b*b))), 0.5) - b*(4 + (4*r1*r1)/(a*a + b*b) - (4*r2*r2)/(a*a + b*b)))/8; End; End; End.