355
правок
Изменения
м
→Невыпуклый многоугольник
== Невыпуклый многоугольник ==
[[Файл:Point in polygon.png|400px|thumb|right|Отмечены только те точки, которые являются верхними для какого-либо ребра]]
Очевидно, что если пустить из точки луч, то по чётности числа пересечений с рёбрами многоугольника можно определить, внутри точка лежит или снаружи.
Пустим луч, например, по иксу, переберём все рёбра и проверим их на пересечение с лучом.
Луч может попасть в точку, при этом прохождение через точку учтётся два раза (по разу для каждого отрезка, к которым принадлежит точка). Иногда это и есть то, чего нам хочется (когда фигура находится выше или ниже луча), но иногда нам хочется учесть только один раз. Для этого для каждого отрезка учитываем только верхнюю точку. Все случаи попадания луча в точку показаны ({{TODO|t=Картинка с лучом, попадающим в точку}}) на рисунке.
Получившийся алгоритм: