Привет, вопрос в том чтобы упорядочить вершины многоугольника по или против часовой стрелке. На одном сайте нашел идею:
Код:
Если же многоугольник выпуклый, но вершины перечислены не в порядке обхода, то их придется упорядочить. Сделать это можно, например, отсортировав вершины по углу между положительной полуосью ОХ и вектором (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)))
Использую сортировку пузырьком. Помогите чем можете...
