Другие языки программирования и технологии
Помогите придумать алгоритм.
Дан массив некой длины из координат случайных точек плоскости. Ясно, что на всех из данных точек можно построить многоугольник, причем только один. Нужно отсортировать массив так, чтобы через точки можно было последовательно провести многоугольник. Язык не важен, мне нужна сама суть алгоритма, остальное сделай сам. На вопросы отвечу в комментариях.
Не сталкивался и не искал в нете. Думаю надо найти мнимый центр этого множества точек. Взять любую точку и произвести прямую до этого центра мнимого. Потом искать следующую точку ближайшую. Ближайшей будет такая точка, угол новой прямой которой будет минимален с ранее проведенным. Так по кругу как бы и отсортируем все.
Где-то так, но может есть и проще алгоритм.
Где-то так, но может есть и проще алгоритм.
Не очень понял фразу "ясно, что на всех из данных точек можно построить многоугольник, причем только один". По определению, многоугольник - замкнутая ломаная, а через 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 по возрастанию у.
Предположим, что вы решаете следующую задачу:
Дано 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 по возрастанию у.
Traveling Salesman Problem
http://www.aforgenet.com/framework/samples/genetic_algorithms.html
http://www.aforgenet.com/framework/samples/genetic_algorithms.html
Похожие вопросы
- Информатика. Программирование. Обработка массивов данных. Помогите составить алгоритм и прог. код к нему.
- Помогите с алгоритмом!
- Помогите написать алгоритм и программу на фортране
- Нужно написать программу (помогите с алгоритмом) с++
- Помогите найти алгоритм подбора множителей к числам заданного массива, сумма произведений которых равна заданному числу
- Помогите составить алгоритм решения задачи
- Помогите с алгоритмом.
- Помогите найти, алгоритм нахождения Произведения простых чисел, на С++, или литературу которая поможет разобраться.
- Помогите придумать тему для выпускной работы по программированию (11 класс)
- Помогите найти алгоритм вычисления простых чисел