我到处搜索,我似乎无法弄明白。我找到很多关于直线/正交多边形分解的文章,但没有关于如何构造一个的文章。
我正在使用Slick2D,我有一张瓷砖地图。我想通过从任何触摸矩形中制作单个多边形来最小化我必须计算的碰撞量(即组合并排的图块)。
示例:https://www.dropbox.com/s/2kf8olw5701e1xn/rectilinear_polygon.png
我正在使用的是一个2D矩阵矩形。我可以遍历并弄清楚哪些是触摸的和所有这些,但由于某种原因我无法弄清楚为什么.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;
}
并不是我收到错误。这是事实,我无论如何都没有变化。没有输出,没有错误,没有统一。这看起来很容易,但是,它并不想让步。
答案 0 :(得分:1)
我发现了一个我想要完成的答案(部分;我仍然得到一些奇怪的结果,但总的来说,它返回了我想要的一般意义)。
Slick2D库中有一个类Geom Utility,它也有一个.union()方法。如果联合起作用,则返回大小为1的Shape数组,如果形状保持分离,则返回2。这与Rectangle和Shape类中的.union()不同(出于某些奇怪的原因......)