![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
В пространстве есть точка, лежащая в плоскости четырёхугольника. Четырёхугольник задан 4 вершинами, координаты точки и вершин известны. Как мне узнать: лежит ли эта точка в данном четырёхугольнике?
-------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 17 Всего: 454 |
Делим четырехугольник на 2 треугольника (2 варианта, пробуем оба - на всякий случай). Проверка того что точка лежит внутри треугольника - тривиальна.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Alx |
|
|||
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
gepard
Модератор: Ну язык-то можно указать? ![]() ![]() |
|||
|
||||
GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: нет Всего: 83 |
Alx
А какая разница!!!! Тут алгоритм только и нужен! :-)))) |
|||
|
||||
Alx |
|
|||
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
GoodBoy
т.е. мне на JS ответить, да? ![]() |
|||
|
||||
GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: нет Всего: 83 |
Alx
Да запросто! :-))))) В С - то же самое практически получится... В Паскале - чуть переделать!!! А можно вообще просто алгоритм описать... :-))))) |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 24 Всего: 110 |
-------------------- qqq |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 17 Всего: 454 |
maxim1000
Неправильно там. Представь четырехугольник с вершинами (0,0) (0,5) (5,-5) (-5,-5) и точку (1,1) - она лежит справа от одних сторон и слева от других... надо сперва бить на треугольники. Кстати, этот же четырехугольник объясняет почему надо пробовать оба разбиения (для четырехугольника это быстрее чем проверять вложенность). А вот тут правильно - Проверка принадлежности точки многоугольнику - особенно см. примечание trurl. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
maxim1000 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 24 Всего: 110 |
это означает, что она находится снаружи многоугольника ![]()
кстати. не стоит забывать о направлении ребер (от этого зависит справа будет точка или слева) направление ребра должно совпадать с направлением обхода... -------------------- qqq |
||||
|
|||||
gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 2 Всего: 40 |
Мне нужен алгоритм, а не исходник. И почему тему перенесли в Работа, хобби и учёба -> Vingrad - Колледж -> Центр помощи Что за бред-то? Я вроде алгоритм прошу. У винграда столько ответвлений стало, что скоро заблудиться можно будет ![]() maxim1000 Благодарю... -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 17 Всего: 454 |
Ты карандашик-то в руки возьми... ![]()
Вот отсюда-то и жопа... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 24 Всего: 110 |
каюсь... был неправ... у этого алгоритма есть одно ограничение: только выпуклые многоугольники ![]() а вообще есть другой: проводим из точки луч (в любую сторну) и считаем, сколько раз он пересек границу многоугольника для простоты можно проводить луч по оси координат... -------------------- qqq |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 17 Всего: 454 |
угу. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 24 Всего: 110 |
почитал внимательно ссылку, которую ты привел, обнаружил, что этот метод там описан...
вывод: надо мне внимательнее читать чужие сообщения ![]() а что касается комментария trurl, то сильно сомневаюсь, что оно будет вычислительно эффективным: 1. для каждого треугольника нужно будет проводить вычисление трех определителей третьего порядка - это куча вычислений 2. в случае трассировки луча - большая часть ребер вообще не будут пересекать ось, так что для них все обойдется двумя операциями сравнения, а для той небольшой части, которые будут - всего две операции умножения+несколько операций +,-,<> -------------------- qqq |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 17 Всего: 454 |
maxim1000
коммент будет вычислительно эффективен, если речь идет о проверке вхождения в полигон, не помещающийся категорически в экран, при отображении точки - т.е. когда имеют место неявные отсечения. На бесконечной плоскости - конечно эффективнее луч. Только все проще - в лоб считается точка пересечения 2 прямых (на которой луч и на которой отрезок) и делается контроль вхождения по одной из координат (если прямая не параллельна оси - пофиг по какой, а если параллельна - именно по этой). Проверка на необходимость до расчета точки пересечения имхо обойдется дороже... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 24 Всего: 110 |
предположим, что исследуемая точка - начало координат (иначе, можно поотнимать ее координаты от всех точек - получится около 2n операций -) 1. предварительный расчет: если (y1>0)==(y2>0), выкидываем ребро, иначе идем дальше 2. окончательный расчет: проверяем (x2*y1>x1*y2)==(y1>y2) получаем ответ (есть пересечение или нет) я точно не знаю: последнее условие - это условие пересечения с лучом или непересечения, но это уже детали количества операций (n - количество вершин, m - количество ребер, пересекающих ось x): +: 0 -: 2n *: 2m /: 0 >: 2n+2m ==(для bool): n+m если разбивать на треугольники, то их будет n-2, и для каждого из них нужно будет считать три определителя...а потом еще и делить... P.S. а при чем тут экран и то, помещается ли в него многоугольник? -------------------- qqq |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
А вот что я нашёл: http://nature.web.ru/db/msg.html?mid=1159496&mode=2
Можно ли это использовать? Это сообщение отредактировал(а) Elfet - 2.6.2007, 22:46 |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 19 Всего: 50 |
Я так узнавал "находится ли точка в треугольнике".
|
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 24 Всего: 110 |
проблема в том, что следствие здесь только в одну сторону т.е. для внешних точек уже нет гарантии, что сумма расстояний до вершин будет больше периметра т.е. получается, что когда сумма расстояний больше периметра, мы знаем, что точка снаружи а когда меньше - непонятно... -------------------- qqq |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 19 Всего: 50 |
Ну по-моему самый нормальный вариант - образно точку соединить отрезками с вершинами квадрата, вычислить длины сторон по координатам точек, найти сумму площадей получившихся треугольников и сравнить ее с площадью квадрата. Если они одинаковы, значи точка в квадрате.
|
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 10 Всего: 23 |
Дарова! я двоишник
![]()
-------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 24 Всего: 110 |
ну если рассматривать только те четырёхугольники, которые являются прямоугольниками со сторонами, параллельными осям координат, то, конечно же, решение упрощается... -------------------- qqq |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |