Находится ли точка в многоугольнике?
Дан многоугольник и точка.
Необходимо проверить, располагается ли наша точка внутри многоугольника.
Если провести горизонтальную прямую проходящую через заданную точку, то могут возникнуть пересечения прямой с многоугольником. Рассмотрим все точки пересечения, у которых абсцисса меньше, чем у заданной точки. Если этих точек нечётное число, то исходная точка лежит внутри многоугольника, иначе нет.
Асимптотика O(n).
Листинг C++
bool point_in_polygon (point t, vector < point > p)
{
int i, j;
int count = 0;
for (i = 0; i < p.size(); ++ i)
{
j = (i + 1) % p.size();
if (min (p[i].y, p[j].y) < t.y && t.y <= max (p[i].y, p[j].y) &&
ccw (min_py (p[i], p[j]), max_py (p[i], p[j]), t))
{
// если проекция точки лежит на отрезке и точка находится справа от отрезка
// то увеличиваем количество "вхождений" точки в многоугольник
++ count;
}
}
return count % 2;
}
25.06.2007, 17:20
По всем вопросам обращаться: rumterg@gmail.com