2013-04-04 115 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()(出於某種奇怪的原因....)