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