2013-04-04 119 views
2

我到处搜索,我似乎无法弄清楚。我发现了很多关于直线/正交多边形分解的文章,但是没有关于如何构造一个文章。从几何组合的矩形创建直线多边形

我在使用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; 
} 

这并不是说我得到一个错误。这是事实,我没有得到任何改变。没有输出,没有错误,没有统一。这看起来很容易,但它并不想让步。

回答

1

我发现了一个我试图完成的部分答案(部分;我仍然得到一些奇怪的结果,但总的来说,它返回了我想要的一般意义)。

在Slick2D库中还有一个类Geom实用工具,它也有一个.union()方法。如果联合工作,则返回Shape大小为1的数组,如果形状保持独立,则返回2。这不同于在矩形和形状类中的.union()(出于某种奇怪的原因....)