我到处搜索,我似乎无法弄清楚。我发现了很多关于直线/正交多边形分解的文章,但是没有关于如何构造一个文章。从几何组合的矩形创建直线多边形
我在使用Slick2D,我有一个瓷砖贴图。我想通过将单个多边形排除在任何感人的矩形之外(即并排拼贴)来最小化我必须计算的碰撞量。
例子:https://www.dropbox.com/s/2kf8olw5701e1xn/rectilinear_polygon.png
什么我工作是矩形的二维数组。我可以遍历并找出哪些是感人的,但是出于某种原因,我无法弄清楚为什么.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;
}
这并不是说我得到一个错误。这是事实,我没有得到任何改变。没有输出,没有错误,没有统一。这看起来很容易,但它并不想让步。