我到处搜索,我似乎无法弄清楚。我发现很多关于直线/正交多边形分解的文章,但没有关于如何构造一个的文章。
我正在使用 Slick2D,并且我有一个平铺地图。我想通过从任何接触的矩形中制作单个多边形(即并排组合)来最小化我必须计算的碰撞量。
示例:https ://www.dropbox.com/s/2kf8olw5701e1xn/rectilinear_polygon.png
我正在使用的是矩形的二维数组。我可以遍历并找出哪些是感人的等等,但由于某种原因,我无法弄清楚为什么 .union() 不起作用(或者我可能不完全理解它?)。在 slick2D 中,它返回一个 Shape[],而在 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;
}
这并不是说我遇到了错误。事实上,我没有得到任何改变。没有输出,没有错误,没有统一。这看似简单的事情,然而,它不想让步。