Задача:
Найти центр описанной окружности возле произвольного многоугольника.
Дано:
Произвольный n-угольник.
Координаты вершин.
Требуется:
Координаты центра описанной окружности.
При:
Количество углов 2<n<100;
Не указанно, что многоугольник выпуклый.
Указание:
Счиать описанной окружностью, окружность с наименьшим радиусом, в которую "поместиться" (наложением) многоугольник.
{$MODE OBJFPC}
{$APPTYPE GUI}
{$E+}
{$E+}
Uses GraphiX, GXCRT, GXMouse, GX2D;
Type
Telem=record
X, Y:longint;
end;
ArrType = array[1..100] of telem;
Function MaxR(TX,TY:longint; A:arrType; n:word):Extended;
var
R:Extended;
i:longint;
Begin
r:=0;
for i:=1 to n do begin
If r<SQRT(SQR(a[i].X-TX)+SQR(a[i].y-ty)) then
r:=SQRT(SQR(a[i].X-TX)+SQR(a[i].y-ty));
end;
Result:=R;
end;
Var
Arr:ArrType;
Tx,Ty,n,i,j,TSuperX,SuperY:longint;
EnterB:boolean; NK:byte; TRR:Extended;
Begin
InitGraphix(ig_detect,ig_col16); {Инициализация графической системы}
{установка графического режима - 1024*768 16 битный цвет}
SetModeGraphix(1024,768,ig_col16);
Bar(0,0,1024,768,rgbcolorRgb(0,0,0)); {заливаем экран черной краской}
{инициализируем мышь и включаем отображение указателя}
InitMouse; MouseON;
EnterB:=false;
n:=0;
{пока не нажата клавиша ENTER}
While not EnterB do begin
Repeat {ждем нажатия клавиши или мыши}
Until (KeyPressed) or (IsMouseInArea(0,0,1024,768)>128);
If keypressed then begin
NK:=ord(readkey);
If NK=13 then EnterB:=true
end
else begin
inc(N);
MouseCoords(Tx,Ty); {получаем координаты курсора}
delay(100); {задержка что бы не было мерцания указателя}
MouseOFF; {выключаем указатель}
putPixel(Tx,Ty,rgbcolorrgb(255,255,255)); {рисуем белую точку}
MouseOn; {сключаем мышь}
arr[n].X:=Tx; {сохраняем в массви координаты точки}
arr[n].Y:=Ty;
end
end;
TRR:=MaxR(1,1,arr,n);
{поиск точки, максимальное расстояние до остальных в которой минимально}
For i:=1 to 1024 do
For j:=1 to 768 do begin
If MaxR(i,j,Arr,n)<TRR then begin
SuperX:=i; SuperY:=j; TRR:=MaxR(i,j,Arr,n)
end;
end;
MouseOff;
circle(SuperX,SuperY,Trunc(MaxR(SuperX,SuperY,Arr,N)),
rgbcolorrgb(1,118,156));
mouseon;
readkey; {ожидаем нажатия клавиши}
end.