从几何组合的矩形中创建直角多边形

3
我已经到处搜寻但仍无法解决问题。我找到了很多关于直角/正交多边形分解的文章,但没有关于如何构造它的文章。
我正在使用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;
}

并不是我收到了一些错误。事实上,我没有得到任何改变。没有输出,没有错误,也没有统一。这看起来很简单,但它似乎不想动一下。

1个回答

1
我找到了一个答案来实现我想要的目标(部分地; 我仍然得到一些奇怪的结果,但总体上,它以一般意义返回我想要的内容)。
Slick2D库中有一个名为Geom Utility的类,它也有一个.union()方法。如果联合成功,则返回大小为1的Shape数组,如果形状保持分离,则返回大小为2的数组。这与Rectangle和Shape类中的.union()不同(因为某种奇怪的原因...)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接