我到處搜索,我似乎無法弄清楚。我發現了很多關於直線/正交多邊形分解的文章,但是沒有關於如何構造一個文章。從幾何組合的矩形創建直線多邊形
我在使用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;
}
這並不是說我得到一個錯誤。這是事實,我沒有得到任何改變。沒有輸出,沒有錯誤,沒有統一。這看起來很容易,但它並不想讓步。