На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Аналитическая геометрия
    Вот нашел на просторах http://www.programmersheaven.com/ программу, которая вычисляет центр и радиус окружности, проходящей через три точки(не лежащие на одной линии).
    ExpandedWrap disabled
      {================================================}
      {     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. Как вообще можно провести окружность через три точки, зная !только! их координаты ???
    Помогите!! пожалуйста!!
      Вообще, три точки, не лежащие на одной прямой – это треугольник. А около любого треугольника можно описать окружность!!(центр -  точка пересечения серединных перпендикуляров)!
      Где у тебя {*} – там проверяется, лежат ли точки на одной прямой.
      Доказательство формул можно получить, если рассмотреть какие-то вектора (уравнение линии, координата середины отрезка, координата пересечения прямых – в данном случаи серединных перпендикуляров , т. е. центр и т.д.). Я точно всё это не помню, поэтому нужно смотреть в литературе.
      П.С. Полистай учебник геометрии за 9 класс...
        Все делаеться гораздо проще.
        Есть система уравнений:
        (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
          Или так:
          S=abc/4R
          S=Sqrt(p(p-a)(p-b)(p-c))
          p=(a+b+c)/2
          Найдешь радиус, а остальное - на твой вкус ;D
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0272 ]   [ 15 queries used ]   [ Generated: 9.12.24, 13:14 GMT ]