Здравствуйте , я хочу Найти координаты точек пересечения двух окружностей радиуса R1 и R2 с
центрами в точках (х1 , у1 ) и (х2 , у2 ) соответственно.
Что я делаю :
1) Есть два уравнения окружности , если они пересекаются , то x и y в уравнениях равны , тогда просто нахожу х и у .
2) Выясняю , пересекаются окружности или нет// если сумма их радиусов больше расстояния между их центрами , значит пересекются.
3) Нахожу координаты точки , через теор пиф.
что же не так , сколько раз уже проверял
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls, ExtCtrls,math, TeeProcs, TeEngine, Chart;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label2: TLabel;
Button1: TButton;
BitBtn1: TBitBtn;
Button2: TButton;
Memo1: TMemo;
Chart1: TChart;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var a,b,a1,b1,o,p:integer;
x,y,z,c,t,k,q,w:integer;
begin
o:=strtoint(edit1.Text);
k:=round(o*2);
z:=strtoint(edit2.Text);
c:=round(z*2);
with chart1.Canvas do
begin
randomize;
pen.Width:=3;
pen.color:=clgreen;
x:=random((450)+110);
y:=random((150)+110);
ellipse(x,y,x+k,y+k);
randomize;
a1:=random((450)+110);
b1:=random((150)+110);
pen.Width:=2;
pen.color:=clred;
ellipse(a1,b1,a1+c,b1+c);
end;
w:=round((sqr(z)-sqr(o)-x-o+sqr(a1+z)-sqr(z)+sqr(o)+sqr(x+o)-sqr(a1+z)+sqr(y+o)-sqr(b1+z)) / 2*(y+o-b1-z)); // координата по y
q:=round((sqr(z)-sqr(o)-sqr(x+o)+sqr(a1+z)-sqr(y+o)+sqr(b1+z)+sqr(z)-sqr(o)-x-o+sqr(a1+z) // координата x
-sqr(z)+sqr(o)+sqr(x+o)-sqr(a1+z)+sqr(y+o)-sqr(b1+z)) /-2*(x+o-a1-z));
p:= round(sqrt(sqr(a1+z-x-o)+sqr(y+o+b1+2))); // расстояние между центрами окружностей
begin
if p<o+z then begin
memo1.text:='Окружности пересекаются в точке y='+floattostr(w)+'x='+floattostr(q) ;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
chart1.Refresh;
memo1.Clear;
end;
end.
подскажите хоть , почему он не определяет когда они просто пересекаются или нет , ведь там формулка по пифагору коротка , не выходит