私はどこでも検索しましたが、それを理解できないようです。直線/直交ポリゴンの分解に関する記事はたくさんありますが、作成方法に関する記事はありません。
私は Slick2D を使用しており、タイル マップがあります。接触している長方形から単一のポリゴンを作成する (つまり、タイルを並べて結合する) ことによって、計算する必要がある衝突の量を最小限に抑えたいと考えています。
例: https://www.dropbox.com/s/2kf8olw5701e1xn/rectilinear_polygon.png
私が取り組んでいるのは、長方形の 2D 配列です。トラバースして、どれが触れているかを把握することはできますが、何らかの理由で .union() が機能しない理由を理解できません (または、完全に理解していないのでしょうか?)。slick2D では Shape[] を返し、awt ではメソッド .createUnion() があるようですが、プログラムの外で試しましたが、何らかの理由で機能しませんでした。ただし、互換性の明らかな理由から、slick2D クラスに固執したいと思います。
Slick2D Rectangle クラス - http://www.slick2d.org/javadoc/org/newdawn/slick/geom/Rectangle.html
私の方法は今のところ簡単です。2 つの正方形を使用してテストするだけで、それらすべてをループして機能するようになると、完全に拡張されます。
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;
}
エラーが発生しているわけではありません。それは私が何の変化も得ていないという事実です。出力なし、エラーなし、統合なし。それは一見簡単なことのように見えますが、それでも、びくびくしたくありません。