Показать сообщение отдельно
  #2  
Старый 24.02.2012, 17:09
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Для начала вынести randomize куда нибудь в FormCreate;

И если задать внятные имена переменных и переписать вот так

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize; // вот так
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  x1,y1,r1,d1:integer; // координаты центра, радиус и диаметр первого круга
  x2,y2,r2,d2:integer;// координаты центра , радиус и диаметр второго круга
  xo,yo:integer;// координаты точки пересечения
begin
  r1:=strtoint(edit1.Text);
  d1:=round(r1*2);
  r2:=strtoint(edit2.Text);
  d2:=round(r2*2);
  with chart1.Canvas do
  begin
    pen.Width:=3;
    pen.color:=clgreen;

    x1:=random((450)+110); // здесь вычисляем не верхний левый угол
    y1:=random((150)+110); // а центр круга
    Brush.Style:=bsClear;
    ellipse(x1-r1,y1-r1,x1+r1,y1+r1);// рисуем эллипс с учетом радиуса


    x2:=random((450)+110);
    y2:=random((150)+110);
    pen.Width:=2;
    pen.color:=clred;

    ellipse(x2-r2,y2-r2,x2+r2,y2+r2);
  end;

  yo:=round((sqr(r2)-sqr(r1)-x1-r1+sqr(x2)-sqr(r2)+sqr(r1)+sqr(x1)-sqr(x2)+sqr(y1)-sqr(y2)) / 2*(y1-y2)); // координата  по y1

  xo:=round((sqr(r2)-sqr(r1)-sqr(x1)+sqr(x2)-sqr(y1)+sqr(y2)+sqr(r2)-sqr(r1)-x1+sqr(x2) // координата   x1

  -sqr(r2)+sqr(r1)+sqr(x1)-sqr(x2)+sqr(y1)-sqr(y2)) /-2*(x1-x2));

(*  p:= round(sqrt(sqr(x2+r2-x1-r1)+sqr(y1+r1+y2+2))); // расстояние между центрами окружностей*)

  p:= round(sqrt(sqr(x2-x1)+sqr(y1-y2))); // расстояние между центрами окружностей*)  begin

  if p>r1+r2 then // проверяем, что окружности находятся слишком далеко
  begin
      memo1.text:='Окружности не пересекаются ' ;
  end else
  if p< Abs(r1-r2) then// проверяем, что одна окружность находятся целиком внутри другой
  begin
      memo1.text:='Окружности не пересекаются ' ;
  end else
  begin
    memo1.text:='Окружности пересекаются в точке y='+floattostr(yo)+'x='+floattostr(xo)  ;
  end;

end;

то сразу станет очевидна ошибка в формуле, вычисляющей p

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