![]() |
|
![]() ![]() ![]() |
|
harper |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 29.5.2006 Репутация: нет Всего: нет |
Многоугольник задан своими вершинами расположенными в порядке их следования, каким образом можно определить направление обхода вершин при построении многоугольника (по часовой или против часовой стрелки)?
|
|||
|
||||
MBo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: 5 Всего: 18 |
Если многоугольник выпуклый, то посчитать векторное (косое, Cross Product) произведение для пары векторов, образованных тремя последовательными точками. Знак его укажет на направление обхода
|
|||
|
||||
harper |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 29.5.2006 Репутация: нет Всего: нет |
может быть и невыпуклым
|
|||
|
||||
SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
MBo, а можешь подробнее?
-------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
MBo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: 5 Всего: 18 |
SparF
Добавлено @ 10:19 harper, >может быть и невыпуклым От центра одного из отрезков направить влево (по его ходу) перпендикулярно отрезку луч, посчитать количество пересечений со сторонами. Четность этого количества (надо не забыть правильно учитывать возможные попадания точно в углы и совпадения луча со сторонами) будет свидетельствовать о направлении обхода (Это использование одного из алгоритмов PointInPolygon) |
|||
|
||||
harper |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 29.5.2006 Репутация: нет Всего: нет |
MBo, а ссылки на более подробное описание есть?
|
|||
|
||||
SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
MBo, понял) спасибо)))
-------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
MBo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: 5 Всего: 18 |
О, еще один способ вспомнил ;)
Посчитать ориентированную площадь (в примере - удвоенная считается) и посмотреть ее знак
Это сообщение отредактировал(а) MBo - 8.10.2006, 11:30 |
|||
|
||||
harper |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 29.5.2006 Репутация: нет Всего: нет |
MBo, это для невыпуклого многоугольника подходит?
|
|||
|
||||
SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
MBo, а как подсчитать площадь для произвольного многоугольника?
я в свое время делал через статистическое моделирование: "стрелял" с равномерным распределением по площади прямоугольника, который описывает этот произвольный многоугольник, и считал сколько попал/не попал в произвольный. есть ли что-нть более быстрое? PS кому надо - могу исходник выложить Это сообщение отредактировал(а) SparF - 8.10.2006, 12:02 -------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
MBo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: 5 Всего: 18 |
harper,
>
Да Добавлено @ 12:08 SparF, >а как подсчитать площадь для произвольного многоугольника? Код я привел, для получения площади нужно модуль результата пополам разделить, вычисления в вещественную арифметику при необходимости перевести. Работает и с невыпуклыми. |
|||
|
||||
SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
MBo,
а можешь картинку дать какие площади он считает на произвольном многоугольнике при помощи
если это, конечно, можно нарисовать или ссылочку где это выводится буду оч благодарен - просто понять для себя хочу (запоминать просто так бесполезно) -------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
MBo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: 5 Всего: 18 |
SparF,
Математически - алгоритм следует из формулы Грина (связь между интегралом по контуру и заключенной в нем площадью), но это, наверно, слишком сложно. http://mathworld.wolfram.com/GreensTheorem.html Каждая величина в скобках - удвоенная площадь треугольника, составленного из двух последовательных точек и начала координат. Модуль векторного произведения есть произведение длин исходных векторов на синус угла между ними Если взять на коорд. плоскости 3 точки A B C, то площадь треугольника ABC есть сумма ориентированных площадей треугольников OAB, OBC, OCA. Общие фрагменты вычтутся. Это сообщение отредактировал(а) MBo - 8.10.2006, 13:52 |
|||
|
||||
SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
MBo,
Пасибо)) просто не представляешь насколько это полезная для меня инфа =) Это сообщение отредактировал(а) SparF - 8.10.2006, 14:25 -------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |