Я искал везде, и я просто не могу понять это. Я нашел много статей о разложении прямолинейных/ортогональных многоугольников, но ничего о том, как их построить.
Я работаю с Slick2D, и у меня есть тайловая карта. Я хочу свести к минимуму количество столкновений, которые мне нужно рассчитать, создавая отдельные полигоны из любых соприкасающихся прямоугольников (т.е. комбинируя плитки рядом).
Примеры: https://www.dropbox.com/s/2kf8olw5701e1xn/rectilinear_polygon.png а>
Я работаю с 2D-массивом прямоугольников. Я могу пройтись и выяснить, какие из них соприкасаются и все такое, но по какой-то причине я не могу понять, почему .union() не работает (или, может быть, я не совсем понимаю?). В slick2D он возвращает Shape[], а в awt, похоже, есть метод .createUnion(), который я пробовал вне своей программы, но он тоже не работал по какой-то причине. Однако я бы предпочел использовать классы slick2D по очевидным причинам совместимости.
Класс Slick2D Rectangle — http://www.slick2d.org/javadoc/org/newdawn/slick/geom/Rectangle.html
Мой метод сейчас прост. Просто используя два квадрата для тестирования, они полностью расширятся, как только я заставлю его работать, перебирая их все.
Polygon p = new Polygon();
//Calculate polygons
public void calcPoly(){
//The blocking array is all rectangles, [0,0] and [1,0] are known to be touching.
p = RectangleToPolygon(blocking[0][0]);
p.union(RectangleToPolygon(blocking[1][0]));
}
И у меня также есть метод преобразования прямоугольника в многоугольник, чтобы убедиться, что я работаю с многоугольниками на всем протяжении.
public Polygon RectangleToPolygon(Rectangle rect) {
Polygon result = new Polygon();
result.addPoint(rect.getX(), rect.getY());
result.addPoint(rect.getX() + rect.getWidth(), rect.getY());
result.addPoint(rect.getX() + rect.getWidth(), rect.getY() + rect.getHeight());
result.addPoint(rect.getX(), rect.getY() + rect.getHeight());
return result;
}
И дело не в том, что я получаю ошибку. Дело в том, что я не получаю НИКАКИХ ИЗМЕНЕНИЙ. Нет вывода, нет ошибки, нет унификации. Казалось бы, простая вещь, но она не хочет сдвинуться с места.