3

私はどこでも検索しましたが、それを理解できないようです。直線/直交ポリゴンの分解に関する記事はたくさんありますが、作成方法に関する記事はありません。

私は 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;
}

エラーが発生しているわけではありません。それは私が何の変化も得ていないという事実です。出力なし、エラーなし、統合なし。それは一見簡単なことのように見えますが、それでも、びくびくしたくありません。

4

1 に答える 1