-4

こんにちは、2 つの長方形が交差するかどうかを確認する質問をしました。長方形が x 軸に平行である場合、コードを書きました。

struct point 
{
 int x;
 int y;
};

struct rect
{
 struct point left;
 struct point right;
};

//1 - intersection
// 0- no intersection
int rectintersectioncheck(struct rect r1,struct rect r2)
{
    int x_check = (r1.left.x > r2.right.x || r2.left.x > r1.right.x);
    int y_check = (r1.right.y > r2.left.y || r2.right.y > r1.left.y);

    if(x_check && y_check )
    {
               return 0;   
    }
    return 1;
}

この場合は正常に機能しますが、長方形が x 軸に平行ではない場合、左上、右下のポイントのみが指定されているため、アルゴについて混乱しています。助けてください。

4

3 に答える 3

1

まず説明。p1 と p2 が長方形の左上と右下の点である場合、長方形はx 軸 (および y 軸) に平行でなければなりません。したがって、これらの条件を満たす長方形は 1 つだけです。長方形が x 軸に平行でない場合、下が同時に直角になることはありません。

x軸に正確に平行ではない長方形について話しているので、その定義をやめましょう。向かい合う 2 つの頂点が p1 と p2 である長方形について話しましょう (必ずしも左上と右下である必要はありません)。

p1 と p2 で最初の長方形を定義し、p3 と p4 で 2 番目の長方形を定義します。

対角が p1 と p2 であるすべての長方形の結合を取ると、(p1+p2)/2 を中心とし、|p1−p2| を直径とする) 円が得られます。

次の 3 つのケースがあります。

  1. p1–p2 線分が p3–p4 線分と交差する場合、四角形は常に交差します。
  2. p1,p2 に対応する円が p3,p4 に対応する円と交差する場合、それらの長方形が交差することがあります。
  3. そうしないと、それらの長方形が交差することはありません。
于 2012-09-12T11:34:09.370 に答える
0

@ELKamina:あなたが議論した円のアプローチは非常に良いですが、円が交差するが長方形が交差しない場合を区別するのは本当に難しい場合があります。

私は彼の考えを念頭に置いています。喜んで共有します。
特定のケースで長方形を配列で構築して、それらが交差するかどうかを確認してみませんか。

 eg.  rect 1- points (1,3)(3,1)(6,4)(4,6)     rect2 points- (4,0)(5,0)(5,1)(4,1)
array represntation                                      array representation
6 [F F F F # F F F]                                      6 [F F F F F F F F]
5 [F F F # # # F F]                                      5 [F F F F F F F F]
4 [F F # # # # # F]                                      4 [F F F F F F F F]
3 [F # # # # # F F]                                      3 [F F F F F F F F]
2 [F F # # # F F F]                                      2 [F F F F F F F F]
1 [F F F # F F F F]                                      1 [F F F F # # F F]
0 [F F F F F F F F]                                      0 [F F F F # # F F]
   0 1 2 3 4 5 6 7                                          0 1 2 3 4 5 6 7

上記の場合、円は交差しますが、長方形は交差しません。

eg
g. rect 1- points (1,3)(3,1)(6,4)(4,6)     rect2 points- (3,0)(4,0)(3,1)(4,1)
 array represntation                                      array representation
6 [F F F F # F F F]                                      6 [F F F F F F F F]
5 [F F F # # # F F]                                      5 [F F F F F F F F]
4 [F F # # # # # F]                                      4 [F F F F F F F F]
3 [F # # # # # F F]                                      3 [F F F F F F F F]
2 [F F # # # F F F]                                      2 [F F F F F F F F]
1 [F F F # F F F F]                                      1 [F F F # # F F F]
0 [F F F F F F F F]                                      0 [F F F # # F F F]
   0 1 2 3 4 5 6 7                                          0 1 2 3 4 5 6 7 

上記の場合、(3,1) は同じ値を持つため、交差していることがわかります。
同様の表現を使用して、三角形が交差するかどうかを確認できます。

于 2012-09-13T07:45:15.133 に答える
-3

答えをスケッチします。

  1. 両方の長方形を回転させて、一方が x 軸と一直線になるようにします
  2. 次に、エッジの式(y = mx + c)を計算できます
  3. もう一方の長方形の辺の公式もわかります
  4. 交差するかどうかを確認します。

回転は、前に設定したリンクを使用して実行できます。

編集

変換を忘れた - 1 つの長方形をシフトして、1 つの座標として 0,0 を持つようにします。

于 2012-09-12T11:29:15.643 に答える