Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

упорядочить список вершин

8.1K
04 октября 2004 года
dima85
4 / / 04.10.2004
Дан выпуклый n-угольник. Для каждой вершины заданы координаты, которые храняться в массиве.
Также имеется список(произвольный) индексов вершин из этого массива. Как можно упорядочить их так, чтобы
получить список в котором те же самые индексы будут располагаться по часовой(или против)
стрелке?

Помогите пожалуйста. Заранее благодарен. Дмитрий.
4.7K
05 октября 2004 года
kelz
42 / / 21.06.2004
Цитата:
Originally posted by dima85
Как можно упорядочить их так, чтобы
получить список в котором те же самые индексы будут располагаться по часовой(или против)
стрелке?



Тебе нужен рабочий алгоритм, или просто идеи? :)

8.1K
05 октября 2004 года
dima85
4 / / 04.10.2004
Цитата:
Originally posted by kelz


Тебе нужен рабочий алгоритм, или просто идеи? :)




Мне нужны просто идеи, а алгоритм сам разработаю.

443
06 октября 2004 года
REmindER
292 / / 23.03.2003
Ну, можно использовать произведение векторов по распространенной формуле:
x1*y2 - x2*y1,
что даст отрицательный результат, если два вектора расположены по ЧС; положительный, если против; и ноль, если образуют прямую. К примеру - на рисунке вектор AB(-3,2) и соседний с ним вектор BC(1,3):
-3*3 - 1*2 = -9 - 3 = -12 => вектора обходятся по ЧС. Или тот же вектор AB и вектор BO(-1,0):
-3*0 - -1*2 = 0 + 2 = 2 => против ЧС. Теперь нам необходимо их отсортировать. Для этого сначала предпочтительно выбрать самую нижнюю точку или самую верхнюю точку, т.к. одна из них точно является выпуклой вершиной. Теперь начнем двигаться по ЧС или против. Ясно, что чем больше угол между текущим вектором и следующим за ним, тем лучше. В идеале этот угол доходит до 180 и вектора образуют линию. К примеру, вектор FA и возможные варианты - вектора AB и AC (пока рассмотрим только их). Эти вектора по отношению к вектору FA являются правильнонаправленными, т.е. попадают в обход по ЧС. Теперь необходимо снова рассмотреть векторное отношение. На этот раз образуем какой-либо соседний с вектором FA вектор и обходим все остальные, следя за тем, чтобы направление обхода оставалось прежним относительно взятого вектора. Если условие выполнилось, то взятый вектор образует с вектором FA найбольший угол. Относительно того же АВ все остальные вектора обходятся по ЧС. Вообще-то говоря, алгоретмически может получиться много умножений для каждой из проверок. В принципе, можно реализовать делением на полуплоскости - там теоретически их должно быть меньше, но лучше, как мне кажется, не пытаться - хрен знает какие там подводные камни...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог