Показать сообщение отдельно
  #1  
Старый 24.02.2012, 00:10
qpmr qpmr вне форума
Прохожий
 
Регистрация: 12.12.2011
Сообщения: 27
Репутация: 10
По умолчанию алгоритм задачи

Здравствуйте , я хочу Найти координаты точек пересечения двух окружностей радиуса 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.




подскажите хоть , почему он не определяет когда они просто пересекаются или нет , ведь там формулка по пифагору коротка , не выходит
Ответить с цитированием