Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.12.2011, 15:59
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

КАК ПРОВЕРИТЬ ПРИНАДЛЕЖНОСТЬ ТОЧКИ ПОЛИГОНУ
Есть 2D пространство с обычной системой координат. В нем есть произвольный многоугольник с рандомным числом вершин расположение которых тоже рандомно , но известно.
Есть точка, положение которой тоже рандомно , но координаты тоже известны.

КАК определить принадлежит она полигону или нет?

Гуглил, нашел кучу способов, фракталы графики и.т.п. Есть ли в вашем арсенале способ попроще?



____________________________________________
А ТЕПЕРЬ ПРАВИЛЬНЫЙ ОТВЕТ!!!!

НУЖНО ПРОВЕСТИ ИЗ ЭТОЙ ТОЧКИ ЛУЧ В ЛЮБОМ НАПРАВЛЕНИИ И ПОСЧИТАТЬ СКОЛЬКО ГРАНЕЙ ПЕРЕСЕЧЕТ ЭТОТ ЛУЧ, ЕСЛИ ЧЕТНОЕ ЧИСЛО, ЗНАЧИТ ТОЧКА ВНЕ ПОЛИГОНА, ЕСЛИ НЕЧЕТНОЕ, ЗНАЧИТ ТОЧКА ВНУТРИ ПОЛИГОНА. ЕСЛИ ПОПАДАЕТ НА ВЕРШИНУ, ТО СДЕЛАТЬ ОПЕРАЦИЮ ЗВАНОГО СМЕНИВ НАПРАВЛЕНИЕ ВЕКТОРА)

Последний раз редактировалось Livanderiaamarum, 12.12.2011 в 18:33.
Ответить с цитированием
  #2 (permalink)  
Старый 12.12.2011, 16:03
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,124

Сообщение от Livanderiaamarum
Есть ли в вашем арсенале способ попроще?
Типа самый простой - закрашивать полигон цветом, а потом проверять цвет точки - если равна цвету полигона, то принадлежит, если нет - не принадлежит
(с)
Ответить с цитированием
  #3 (permalink)  
Старый 12.12.2011, 16:09
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

Сообщение от ksa Посмотреть сообщение
Типа самый простой - закрашивать полигон цветом, а потом проверять цвет точки - если равна цвету полигона, то принадлежит, если нет - не принадлежит
(с)
ух ты)) не подумал) это получится типа как ускоритель видеокартой? если мы будем canvas использовать)? ыы

нет ну а если нам нужно все абстрактно сделать)?
просто интересно))
Ответить с цитированием
  #4 (permalink)  
Старый 12.12.2011, 16:11
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,124

Я давно с графикой не работал... Т.ч. в этом не советчик. Просто этот "способ" запомнил, вот собственно и всё....
Ответить с цитированием
  #5 (permalink)  
Старый 12.12.2011, 16:18
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,124

Сообщение от Livanderiaamarum
а если нам нужно все абстрактно сделать)?
Вот абстракный вариант.
Цитата:
Проверка принадлежности точки полигону


Алгоритм несложный. Просматриваем все вершины. Теперь получим вектор от точки пересечения до текущей вершины: вычитаем вектор точки пересечения из вектора текущей вершины. Аналогично получим вектор от точки пересечения до следующей вершины. Затем находим угол между этими векторами и добавляем его к текущему углу Angle. Нетрудно доказать, что после просмотра всех вершин значение Angle будет равно 2*pi (360 градусов) только в том случае, если точка находится внутри полигона. В силу неточностей вычислений с плавающей точкой может быть, например, что угол будет равен (2*pi – 0.00001), поэтому проверяем, если угол больше либо равен 2*pi*const (константа близкая к единице), возвращаем true, точка находится внутри полигона, иначе возвращаем false.
http://www.gamedev.ru/articles/?id=30123
Ответить с цитированием
  #6 (permalink)  
Старый 12.12.2011, 17:46
Интересующийся
Отправить личное сообщение для irezvov Посмотреть профиль Найти все сообщения от irezvov
 
Регистрация: 24.11.2011
Сообщений: 24

если есть возможность то для каждой составляющей полигона можно хранить нормаль ориентированную вовнутрь, затем искать ближайший к искомой точке отрезок и проверять с какой стороны от него находится точка
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить загружены ли все картинки браузером Aderba jQuery 13 29.05.2014 14:18
Как проверить присутствует ли на странице заданный объект? nick Общие вопросы Javascript 7 18.12.2010 19:16
Как проверить существование функции Aderba Общие вопросы Javascript 2 14.11.2008 16:09
как проверить поддеружет браузер определенное событие? GOll Элементы интерфейса 9 24.07.2008 14:40