Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Pascal > Аналитическая геометрия


Автор: _DaniK_ 11.02.03, 18:45
Вот нашел на просторах http://www.programmersheaven.com/ программу, которая вычисляет центр и радиус окружности, проходящей через три точки(не лежащие на одной линии).
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    {================================================}
    {     This program is taken from the book,       }
    { "PASCAL programs in science and engineering"   }
    {    by Jules H. Gilder & J. Scott Barrus        }
    {   Published by, HAYDEN ISBN 0-8104-6265-6      }
    {================================================}
    { Title:  Circle Finder                          }
    { Program Summary: Program will find the center  }
    { and radius of a circle that is formed by three }
    { points not in a straight line.                 }
    {================================================}
     
    Program Circle_Finder;
     uses Crt;
    var
       cont     : Char;
        X1,X2,X3,     Y1,Y2,Y3,      Part1,    Part2,    Part3,    Part4,    X,Y,    Radius   : Real;
     
    Procedure Title;
       begin
            Clrscr;
            Writeln('Circle Finder');        Writeln;
            Writeln('This program will find the center and');
            Writeln('radius of a circle that is determined');
            Writeln('by any three points in a plane that ');
            Writeln('does not form a straight line.');
            Writeln;
            Writeln('Note: For all entries that require');
            Writeln('      data entries (x,y); separate ');
            Writeln('      all data with a space.');
            Writeln;
       end;  { Title }
     
    Procedure Input;
      begin
         Write('Enter first point  (X,Y):   ');
         Readln(X1,Y1);
         Write('Enter second point (X,Y):   ');
         Readln(X2,Y2);
         Write('Enter third point  (X,Y):   ');
         Readln(X3,Y3);
         Writeln;Writeln;Writeln;
      end;
     
    Procedure Find;
       begin
         Part1 := ((X2-X1) * (X2+X1) + (Y2-Y1) * (Y2 + Y1)) / (2.0 * (X2-X1));
         Part2 := ((X3-X1) * (X3+X1) + (Y3-Y1) * (Y3 + Y1)) / (2.0 * (X3-X1));
         Part3 := (Y2 - Y1) / (X2 - X1);
         Part4 := (Y3 - Y1) / (X3 - X1);
    {*}   If (Part3=Part4)
    {*}    then begin
    {*}           writeln('three points in a straight line!!! Plz, enter another three points!!!');
    {*}           exit;
    {*}           end;
         Y := (Part2 - Part1) / (Part4 - Part3);
         X := Part2 - Part4 * Y;
         Radius := SQRT (SQR (X3 - X) + SQR (Y3 - Y));
       end;
     
    Procedure Print1;
       begin
          Writeln('The circle defined by the following');
          Writeln('three points:');
          Writeln;
          Writeln(' X1 = ',X1:7:4,' Y1 = ',Y1:7:4);
          Writeln(' X2 = ',X2:7:4,' Y2 = ',Y2:7:4);
          Writeln(' X3 = ',X3:7:4,' Y3 = ',Y3:7:4);
          Writeln;
          Writeln('has a radius = ',Radius:4:4);
          Writeln; Radius:=0;
          Writeln('at a center located at:');
          Writeln;
          Writeln(' X = ',X:4:4,'    Y = ',Y:4:4); x:=0; y:=0;
       end; { Print1 }
     
    begin  { Main }
      Repeat
            Title;
            Input;
            Find;
            Print1;
              Writeln;Writeln;
              Write('Do you have another 3 points? (Y/N)');
              Readln(cont);
       Until cont in ['n','N'];
    end.

1. Объясните мне пожалуйста, КАК выведены формулы нахождения координат центра окружности и её радиуса, кторые исп. в процедуре Find ???
{*} - это моё вкрапление.
2. Как вообще можно провести окружность через три точки, зная !только! их координаты ???
Помогите!! пожалуйста!!

Автор: plan 12.02.03, 12:29
Вообще, три точки, не лежащие на одной прямой – это треугольник. А около любого треугольника можно описать окружность!!(центр -  точка пересечения серединных перпендикуляров)!
Где у тебя {*} – там проверяется, лежат ли точки на одной прямой.
Доказательство формул можно получить, если рассмотреть какие-то вектора (уравнение линии, координата середины отрезка, координата пересечения прямых – в данном случаи серединных перпендикуляров , т. е. центр и т.д.). Я точно всё это не помню, поэтому нужно смотреть в литературе.
П.С. Полистай учебник геометрии за 9 класс...

Автор: Testudo 16.02.03, 04:59
Все делаеться гораздо проще.
Есть система уравнений:
(x1-x)^2+(y1-y)^2=r^2;
(x2-x)^2+(y2-y)^2=r^2;
(x3-x)^2+(y3-y)^2=r^2;
Три уравнени, три неизвестных - решить можно... ;D

Автор: tserega 16.02.03, 10:22
Или так:
S=abc/4R
S=Sqrt(p(p-a)(p-b)(p-c))
p=(a+b+c)/2
Найдешь радиус, а остальное - на твой вкус ;D

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)