Метод Contains не работает с точкой внутри моего многоугольника - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь добавить функциональность, которая позволяла бы мне видеть, находится ли точка внутри многоугольника.

Вот фрагмент кода, чтобы увидеть, находится ли точка внутри моего многоугольника

int x = 265;
int y = 300;
List<Point> points = new ArrayList<Point>(); 

points.add(new Point(233,155));
points.add(new Point(347,269));
points.add(new Point(136,251));
points.add(new Point(250,366));

Polygon polygon = new Polygon();//java.awt.Polygon

for(Point point : points) {
    polygon.addPoint(point.x, point.y);
}

return polygon.contains(x,y);

Код работает, если моя точка находится ближе к верхней левой стороне многоугольника, однако, когда точка находится на нижней правой стороне, метод содержит вернет false.

График моего многоугольникаи вопрос: https://www.desmos.com/calculator/tnglrdpivn

Есть идеи, почему это происходит?

1 Ответ

0 голосов
/ 16 ноября 2018

Ключ здесь в упорядочении ваших очков. Несмотря на то, что они нанесены сразу на график, они выглядят так, как будто они образуют красивый многоугольник, если вы играете с ними в точку соединения в том порядке, в каком вы добавляете их в многоугольник, они образуют очень странную форму, и точка на самом деле не содержится в многоугольнике.

Если вы измените порядок последних двух точек, полигон «соединить точки» будет сформирован правильно, и тогда точка будет , содержащейся в многоугольнике.

...