0

2 つの長方形が重なっている量と方向を判断するために使用できるアルゴリズムを知っている人はいますか? これを理解するために何時間も費やしたので、slick2d + Java で書かれた基本的なタイル ゲームに実装できます。

4

3 に答える 3

1

コーナーの座標をポーリングし、の最も近い頂点と最も遠い頂点のSquare1間にコーナーがある場合Square2、それらは座標の違いによって衝突していますか?

例:

square1.setVertex1(0,0);
square1.setVertex2(2,0);
square1.setVertex3(2,2);
square1.setVertex4(0,2);

square2.setVertex1(1,1);
square2.setVertex2(4,1);
square2.setVertex3(4,4);
square2.setVertex4(1,4);

Vertex[] verticesSq1=Square1.getVertices();
for (Vertex vert: verticesSq1) {
    if(vert.getXVal>square2.getLowestXVal() &&
       vert.getXVal<square2.getHighestXVal() 

       &&
       vert.getYval>square2.getLowestYval() &&
       vert.getYVal<square2.getHighestYVal() {

            System.out.write("Vertex "+vert.ID+" is overlapping Square 2 by " +
            vert.getXval()-square2.getLowestXVal +","+
            vert.getYval()-square2.getLowestYVal);
    }
}
于 2012-04-20T16:20:03.210 に答える
1

各長方形を R=(x1,x2,y1,y2) (つまり、(x1,y1), (x1,y2), (x2,y1), (x2,y2) はその長方形の頂点であり、x1

ここで、R1 と R2 の 2 つの四角形があり、それらが重なり合っているかどうか、重なり合っている場合はどの方向かを知りたいと考えています。

R1 の各頂点について、4 ビットで表現できる長方形 R2 の内側にあるかどうかを確認します。マッピングは非常に直接的です。

0000 -> None (or R2 is inside R1)
0001 -> R2 is bottom right of R1
0010 -> R2 is top right of R1
0100 -> R2 is bottom left of R1
1000 -> R2 is top left of R1
0011 -> R2 is right of R1
0101 -> R2 is bottom of R1
1100 -> R2 is left of R1
1010 -> R2 is left of R1
1111 -> R1 is inside R2

他の組み合わせは不可能です。

于 2012-04-20T17:58:41.743 に答える
0

まず、長方形の間に中心点を作成します(2番目の長方形の中心-2番目の長方形の中心)。各長方形のすべての点から中心点までの距離を確認します。最も近い2つのポイントを選択し、そのうちの1つが他の長方形の内側にあるかどうかを確認します。ある場合は、これら2つのポイントによって作成された長方形によって重なり合う領域が得られます。

于 2012-04-20T16:18:06.560 に答える