Другие языки программирования и технологии

Помогите придумать алгоритм.

Дан массив некой длины из координат случайных точек плоскости. Ясно, что на всех из данных точек можно построить многоугольник, причем только один. Нужно отсортировать массив так, чтобы через точки можно было последовательно провести многоугольник. Язык не важен, мне нужна сама суть алгоритма, остальное сделай сам. На вопросы отвечу в комментариях.
Не сталкивался и не искал в нете. Думаю надо найти мнимый центр этого множества точек. Взять любую точку и произвести прямую до этого центра мнимого. Потом искать следующую точку ближайшую. Ближайшей будет такая точка, угол новой прямой которой будет минимален с ранее проведенным. Так по кругу как бы и отсортируем все.
Где-то так, но может есть и проще алгоритм.
ВП
Виктор Пчёлкин
86 521
Лучший ответ
Не очень понял фразу "ясно, что на всех из данных точек можно построить многоугольник, причем только один". По определению, многоугольник - замкнутая ломаная, а через N точек можно провести много ломаных (если N > 3 и точки различны)

Предположим, что вы решаете следующую задачу:
Дано N различных точек на плоскости (N > 3). Найти последовательность точек длины N, соединяя которые в указанном порядке, получим простой многоугольник (многоугольник, составленный на основе ломаной без самопересечений) . Для замыкания ломаной необходимо соединить последнюю точку с первой.

Идея: найти 2 точки (A и B), проведя через которые прямую (которую назовём осью) , разделим плоскость на две полуплоскости таким образом, что все N точек лежат в одной полуплоскости. Затем спроектируем остальные точки на эту ось, отсортируем по положению проекций. Искомая последовательность будет: A, отсортированные точки, B.

Пусть на плоскости имеется прямоугольная координатная сетка (x, y)

1. Как искать A и B: в качестве A выберем точку с максимальным y. Если таких несколько, то A будет точкой с минимальным x, а B с максимальным x из них. Если таких точек только одна, то в качестве B выберем точку, для которой прямая AB образует минимальный угол с осью OX (если таких несколько, выберем самую дальнюю от A)
2. Как сортировать оставшиеся точки: развернем систему координат так, чтобы новая ось OX была параллельна AB, а вся фигура лежала в неотрицательной по y полуплоскости. Точки сортируем по возрастанию новой координаты x, среди совпадающих x по возрастанию у.