@vampire444

Как проверить принадлежность многоугольника к некоторой области координатной плоскости?

Пусть на координатной плоскости есть некоторое количество многоугольников. Как я могу проверить, что один или несколько из них принадлежат (или не принадлежат) некоторой заранее известной области.
Более конкретные примеры.
59d714bc87966286043544.jpeg
1. Как я могу узнать, что часть многоугольника принадлежит моей области? (красное окно 1)
2. Как я могу узнать, что части нескольких многоугольников находятся внутри моей области? (окно 2)
3. ---//--- , что моей области не принадлежит ни один из многоугольников? (окно 3)
4. ---//--- , что моё окно полностью находится внутри одного или нескольких многоугольников? (окно 4)
5, ---//--- , что моё окно полностью охватывает один или несколько многоугольников и при этом, возможно, захватывает части других многоугольников? (окно 5)

Совсем что-то запутался с этой задачей. В лучшем варианте был благодарен пошаговому алгоритму или алгоритму на каком-нибудь языке программирования или псевдо-языке. Ну или хотя бы просто математическое обоснование как это сделать. За это тоже спасибо скажу :)
  • Вопрос задан
  • 268 просмотров
Решения вопроса 1
tsarevfs
@tsarevfs
C++ developer
Если окно это прямоугольник со сторонами паралельными осям координат (вертикальными и горизонтальными), то стоит этим пользоваться, это сильно упростит жизнь.
Какие есть варианты:
1 многоугольник попал в окно целиком
2 многоугольник пересекает окно
3 окно лежит внутри прямоугольника
В первом случае все вершины многоугольника лежат внутри, пересечений по сторонам нет.
Во втором, есть пересечения по сторонам. Вершины могут быть распределены по-разному(!)
В третьем нет пересечений сторон, все вершины снаружи.

Получается надо уметь проверять 2 факта:
1 вершина внутри окна -- элементарно, x_min<=x<=x_max && y_min<=y<=y_max
2 сторона многоугольника пересекается со стороной квадрата. Чуть сложнее, но учитывая что стороны квадрата паралельны осям, код будет несложный.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Griboks
@Griboks
Во многих языках программирования это уже реализовано. Например, Rectangle.Intersects().
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы