Привет, вопрос в том чтобы упорядочить вершины многоугольника по или против часовой стрелке. На одном сайте нашел идею:
Код:
Если же многоугольник выпуклый, но вершины перечислены не в порядке обхода, то их придется упорядочить. Сделать это можно, например, отсортировав вершины по углу между положительной полуосью ОХ и вектором (Xi-Xm, Yi-Ym).
Где Xm и Ym-любая точка внутри многоугольника. Для определения этой точки я написал функцию, там вроде без проблем. А вот с сортировкой возникли проблемы:
Код:
void polygon::sorting(double x_int,double y_int)
{
   double temp;
   for(int i=0; i < number; i++)
   {
      for(int j = number-1; j > i; j-- )
      {
         if ( acos((x[j-1]-x_int)/sqrt((x[j-1]-x_int)*(x[j-1]-x_int)+(y[j-1]-y_int)*(y[j-1]-y_int))) < acos((x[j]-x_int)/sqrt((x[j]-x_int)*(x[j]-x_int)+(y[j]-y_int)*(y[j]-y_int))))
         {
            temp=x[j-1]; x[j-1]=x[j]; x[j]=temp;
            temp=y[j-1]; y[j-1]=y[j]; y[j]=temp;
         }
      }
   }
   
   return;
}
double x_int,double y_int - это координаты внутренней точки. Функция работает, только не правильно 

 Например если в многоугольнике есть точки которые имеют одинаковую координату x, но разную y. В этом случае 
Код:
acos((x[j-1]-x_int)/sqrt((x[j-1]-x_int)*(x[j-1]-x_int)+(y[j-1]-y_int)*(y[j-1]-y_int))) = acos((x[j]-x_int)/sqrt((x[j]-x_int)*(x[j]-x_int)+(y[j]-y_int)*(y[j]-y_int)))
 Использую сортировку пузырьком. Помогите чем можете... 
