Тема: Как определить, что точка лежит внутри контура?

У меня такая проблема:
Мне необходимо определить лежит ли точка внутри контура. Контур замкнут и состоит из различных объектов. Я могу его программно распознать и преобразовать его к примеру в полилинию, а вот с точкой проблема.
любая помощь. Буду рад.

Re: Как определить, что точка лежит внутри контура?

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

Re: Как определить, что точка лежит внутри контура?

Для полигонов:
http://astronomy.swin.edu.au/~pbourke/g … nsidepoly/
Если будут дуговые сегменты, то надо еще доп. проверки делать.

Re: Как определить, что точка лежит внутри контура?

Неужели нет каких-то наработанных блоков, или модулей?

Re: Как определить, что точка лежит внутри контура?

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

Re: Как определить, что точка лежит внутри контура?

> ArxMaster
Э... не вижу проблемы. Если точка не пренадлежит контуру (это легко проверить) и этот контур замкнут, то проведённая через эту точку прямая всегда имеет чётное количество пересечений. А дальше смотрим какая точка находится, например, справа - чётная или нет? Ну и т.д. Вообще говоря, этот подход применим к понятию множества, а не только к полигону...

Re: Как определить, что точка лежит внутри контура?

> archimag
А как быть, если прямая проходит по касательной...

Re: Как определить, что точка лежит внутри контура?

> Евгений
Да, согласен, этот момент необходимо проверять. Т.е. из списка точек пересечения необходимо исключить такие точки, в которых прямая проходит по касательной...

Re: Как определить, что точка лежит внутри контура?

> Oleg
У меня есть простой модуль, но на лиспе...
Смысл простой:
заштриховываем полилинию и выбираем точкой со включенной привязкой и увеличенным прицелом. В моей программе требуется указание полилиний точкой внутри... Поэтому все полилинии заранее штрихуются цветом экрана акада.
Если интересен лисп, могу выложить.

Re: Как определить, что точка лежит внутри контура?

http://geometryalgorithms.com/Archive/a … m_0103.htm

Re: Как определить, что точка лежит внутри контура?

Сам еще не проверял, но простее всего использовать из MFC  класс CRgn и его метод:
BOOL PtInRegion( int x, int y ) const;
BOOL PtInRegion( POINT point ) const;

Re: Как определить, что точка лежит внутри контура?

> Snoop
:)