каждые три точки .... задают треугольник .... по сути каждая сторона треугольника это ХОРДА! А как известно перпендикуляры к хотя бы к 2-м серединам хорд дают пересечением однозначно центр окружности! Радиус получаешь по 2-м точкам центру окружности и любой из 3-х заданных точек!
.... если
struct crd
{
int x;
int y;
};
crd mnohestvo[N];
то проход по всевозможным тройкам
Код:
float l;
for(i=0;i<N-3;i++)
for(j=i+1;j<N-2;j++)
for(k=j+1;k<N;k++)
if(min>(l=raschet(i,j,k)))
min=l;
расчет середины хорды
Код:
void find_sered(crd *first,crd *second,crd *sered)
{
sered->x=(first->x+second->x)/2;
sered->y=(first->y+second->y)/2;
}
уравнение прямой проходящей через 2 точки
y = kx + b — уравнение прямой, проходящей через точки A и B, где
k = (yB — yA) / (xB — xA)
уравнение перпендикуляра проходящего к отрезку AB
и проходящему через точку С
y = -(1/k)x + (Yc + (1/k)Xc)
и наконец нахождение центра
который равен решению системы 2-х уравнений
y = -(1/k)x + (Yc + (1/k)Xc) для 1-й и 2-й точек
и такому же для 2-й и 3-й точек.