Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

Как узнать, находится ли точка внутри многоугольника?   Найти похожие ветки 

 
dera   (2006-03-11 17:56) [0]

...Координаты всех точек известны. Мож., кто подскажет алгоритм решения или есть у кого-то готовый код?


 
API ©   (2006-03-11 18:04) [1]

1. Нарисуйте на листке бумаги совершенно произвольный многоугольник.
2. Поставьте произвольно точку.
3. Проведите горизонтальную (вертикальную, под любым углом) линию через этут точку.
4. Посчитайте количество пересеченией линий многоугольника с этой линией с одной стороны от точки и с другой стороны от точки.
5. Пока не поняли в чем дело - переходите к п. 2 (можно и к п. 1).
6. Напишите алгоритм.
7. Реализуйте алгоритм в виде готового кода. Если на этом этапе возникнут трудности - пишите письма в "Начинающим".


 
begin...end ©   (2006-03-11 18:08) [2]

CreatePolygonRgn + PtInRegion. Оно рульно будет.


 
Desdechado ©   (2006-03-11 19:08) [3]

особенно весело для самопересекающихся многоугольных областей


 
antonn ©   (2006-03-11 19:26) [4]

нарисовать на битмапе полигоном с заливкой, посмотреть цвет пикселя по координатам:)


 
begin...end ©   (2006-03-11 19:30) [5]

> Desdechado ©   (11.03.06 19:08) [3]

Просьба пояснить, к чему относится этот комментарий. Пока не совсем ясно.


 
Alarm ©   (2006-03-11 19:44) [6]

>begin...end ©   (11.03.06 19:30) [5]
Комментарий к тому, что не задана последовательность соединения Координаты всех точек известны:)


 
Гаврила ©   (2006-03-11 19:47) [7]


> не задана последовательность соединения

Судя по всему, все таки задана.
Через регион проще всего, короче


 
palva ©   (2006-03-11 22:35) [8]

Если последовательность не определена, то задача может стать неразрешимой, т. е. ответ зависит от последовательности, в которой мы соединяем точки рисуя многоугольник. Даже если не рассматривать многоугольники с самопересечениями.


 
Sergey Masloff   (2006-03-11 23:47) [9]

palva ©   (11.03.06 22:35) [8]
ptInRegion с самопересечением работает без проблем. Сложности задачи по прежнему не вижу.


 
Ricks ©   (2006-03-11 23:53) [10]

Если допустить, что область правильная, то если точка принадлежит области, сумма углов от i-ой вершины к (i+1)-ой вершине равна 2*пи.
То есть находишь углы между векторами, соединяющими проверяемую точку с i и i+1 вершиной а затем складываешь их. Сумма должна быть приблизительно 2*пи
Вроде бы так.


 
Sergey Masloff   (2006-03-12 09:27) [11]

Да, сколько интересных алгоритмов можно восстановить не зная стандартных и отлаженых функций. Просто зависть берет сколько у людей задора и свободного времени.


 
grisme ©   (2006-03-12 10:23) [12]

короче, можно так. ищешь площадь каждого треугольника(образованного твоей точккой и каждой парой вершин),затем ищешь площадь многоугольника и сравниваешь. если площади равны-точка внутри, иначе-снаружи.я как-то решал такую задачу с треугольником - решил этим способом.:)


 
API ©   (2006-03-12 11:20) [13]

[11] Sergey Masloff   (12.03.06 09:27)
Да, сколько интересных алгоритмов можно восстановить не зная стандартных и отлаженых функций. Просто зависть берет сколько у людей задора и свободного времени.


HRGN и функции работы с ним - один из возможных  способов обработки областей размера порядка размеров экрана и немного выше. Все что еще выше - уже сложней. При использовании координат с плавающей точкой - они уже неприменимы. При использовании непрямоугольной системы координат - тоже. Заметьте - в вопросе ни слова не сказано об используемых координатах и координатной системе. Поэтому регионы, в данном случае, - совершенно частное, узкое и потому - некорректное решение. При использовании декартовой системы координат - я предложил в [1]. А если система координат полярная - Ricks © [10]. Причем, что характерно, и [1], и [10] - гораздо более универсальные и математически обоснованные решения, чем применение регионов.

Хотя, может, я и ошибаюсь, и существуют "стандартные и отлаженные функции" для решения этих задач? Просвятите...

[12] grisme ©   (12.03.06 10:23)

Мощь! Хотя, если пространство неевклидово - тогда очень даже хороший метод. Причем - даже в обычной картографии - для пересеченной местности - имеет место для применения. Хотя - очень частного применения. :)


 
Sergey Masloff   (2006-03-12 11:33) [14]

API ©   (12.03.06 11:20) [13]
> совершенно частное, узкое и потому - некорректное решение.
Странная логическая цепочка ;-)
Все же считал и буду считать что начинать следует с простых решений. Если бы аффтар написал - проблема, задача следующая: .... пробовал ... не подошло по причине ... тогда можно привлекать всяческие алгоритмы и развивать вокруг теории и прочее. А пока я уверен на 99.9% что "некорректное" решение с ptInRegion решит поставленую задачу.


 
Sergey Masloff   (2006-03-12 11:37) [15]

Кстати было уже обсуждение этой проблемы тут и приводимый вами алгоритм звучал, посту на 40 я предложил любимый ptInRegion и все закончилось ;-)


 
API ©   (2006-03-12 11:58) [16]

Странная логическая цепочка

Ну вот такой вот я странный. :)

Кстати было уже обсуждение этой проблемы тут и приводимый вами алгоритм звучал, посту на 40 я предложил любимый ptInRegion и все закончилось

Я более чем уверен, что автору данной ветки региона - вполне достаточно, особенно учитывая прочие его вопросы на форуме.
Но вопрос им был поставлен более широко.
Поэтому, в общем случае,- все предложенные варианты, в зависимости от более уточненных (уже самим автором, в процессе "фильтрации" ответов) условий, без сомнения, имеют право на реализацию. Хотя, все они являются частными, то есть не дают однозначного точного ответа на поставленный вопрос, т.е. - не совсем корректны (с точки зрения правильности, точности). И опять же: вместе они составляют неполное множество возможных решений - ибо единого решения поставленной задаче нет. :)


 
grisme ©   (2006-03-12 12:14) [17]

проблема приведенного мной алгоритма - число вершин. не знаю, с треугольником решилось нормально.:)



Страницы: 1 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.052 c
1-1140168422
kyn66
2006-02-17 12:27
2006.03.26
Как доработать компонент


6-1134218767
Igor_thief
2005-12-10 15:46
2006.03.26
TidTelnet (Indy 10)


2-1142324933
dabreezy
2006-03-14 11:28
2006.03.26
Опять вопрос по потокам


3-1138964578
Tsa
2006-02-03 14:02
2006.03.26
Создание не постоянного соеденения


3-1138803561
Инъектор
2006-02-01 17:19
2006.03.26
Проблема в открытии dbf файла после выгрузки