Показать сообщение отдельно

  #1  
Старый 30.12.2009, 18:09
Retimiled
Banned
Регистрация: 24.12.2009
Сообщений: 141
С нами: 8622379

Репутация: 45
По умолчанию

каждые три точки .... задают треугольник .... по сути каждая сторона треугольника это ХОРДА! А как известно перпендикуляры к хотя бы к 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-й точек.

Последний раз редактировалось Retimiled; 30.12.2009 в 18:43..
 
Ответить с цитированием