Алгоритм проверки полного включения одного полигона в другой? Доброго времени суток! В данный момент озабочен поиском алгоритма проверки полного включения одного полигона в другой. Интересует верность моей идеи:
- проверяем попарно пересечения сторон исходного полигона с искомым. Если хотя бы 1 пара пересекается, значит полигон не лежит внутри целиком
+ возможно есть готовые реализации алгоритма на java или хотя бы близком к нему(чтоб не clojure какой-нибудь)?
Заранее спасибо!

21 Авг 2019 в 06:16
168 +1
0
Ответы
1

Здравствуйте! Ваша идея верна, однако для проверки полного включения одного полигона в другой можно воспользоваться алгоритмом точек в полигоне.

Вот пример алгоритма на Java для проверки полного включения одного полигона в другой:

public class PolygonInclusion {
public static boolean isPolygonInsidePolygon(Polygon polygon1, Polygon polygon2) {
for (Point point : polygon1.getPoints()) {
if (!isPointInsidePolygon(point, polygon2)) {
return false;
}
}
return true;
}
private static boolean isPointInsidePolygon(Point point, Polygon polygon) {
int intersections = 0;
Line ray = new Line(point, new Point(Double.MAX_VALUE, point.y)); // Луч, идущий вправо от точки
for (Line edge : polygon.getEdges()) {
if (ray.intersects(edge)) {
intersections++;
}
}
return intersections % 2 != 0;
}
// Класс для точки
static class Point {
double x;
double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
}
// Класс для линии
static class Line {
Point start;
Point end;
public Line(Point start, Point end) {
this.start = start;
this.end = end;
}
public boolean intersects(Line line) {
// Проверка на пересечение двух линий
}
}
// Класс для полигона
static class Polygon {
List<Point> points;
public Polygon(List<Point> points) {
this.points = points;
}
public List<Point> getPoints() {
return points;
}
public List<Line> getEdges() {
// Создание сторон полигона
}
}
}

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

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

20 Апр в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 654 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир