Я искал всюду, и я просто не могу понять это. Я нахожу много статей о разложении прямолинейных/ортогональных многоугольников, но ничего о том, как его построить.Создание прямоугольного многоугольника из геометрически комбинированных прямоугольников
Я работаю с Slick2D, и у меня есть карта плитки. Я хочу свести к минимуму количество столкновений, которые я должен вычислить, сделав одиночные полигоны из любых трогательных прямоугольников (т. Е. Объединяя бок о бок плитки).
Примеры: https://www.dropbox.com/s/2kf8olw5701e1xn/rectilinear_polygon.png
То, что я работаю с представляет собой 2D-массив прямоугольников. Я могу пройти и выяснить, какие касаются и все такое, но почему-то я не могу понять, почему .union() не работает (или, может быть, я не совсем понимаю это?). В slick2D он возвращает форму [], а в awt, похоже, существует метод .createUnion(), который я пытался использовать вне своей программы, но по какой-то причине он не работал. Я бы предпочел придерживаться классов slick2D, хотя по очевидным причинам совместимости.
Slick2D Прямоугольник класс - 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;
}
И это не значит, что я получаю сообщение об ошибке. Это факт, что я вообще НЕ ИЗМЕНЯЮ. Нет выхода, нет ошибки, нет объединения. Это, казалось бы, простой материал, но он не хочет двигаться.