2009-10-11 13 views
12

編集:誰もが興味を持っている場合には、私はこの問題を解決するために使用(C#で)2つの矩形の重複領域を見つける

シンプルコード(フレドリックのおかげで):

int windowOverlap(Rectangle rect1, Rectangle rect2) 
    { 
     if (rect1.IntersectsWith(rect2)) 
     { 
      Rectangle overlap = Rectangle.Intersect(rect1, rect2); 
      if (overlap.IsEmpty) 
       return overlap.Width * overlap.Height; 
     } 

     return 0; 
    } 

オリジナル質問:

2つの長方形が重なり合っているかどうか、重複の面積を計算しているかどうかを確認するには、素早く汚れた方法を知りたいのですが、好奇心のために、私は、1)両方の矩形のすべての線が垂直または水平のいずれかであるか、2)任意の2つの矩形の一般的な場合に興味がありますが、本当に必要な答えはケース1です。

()私は、分離軸試験を使用して考えていたが、矩形が唯一の水平線と垂直線を持っている場合(速い)さらに簡単があるA.Intersectsについて

double areaOfOverlap(Rect A, Rect B) 
{ 
    if (A.Intersects(B)) 
    { 
     // calculate area 
     // return area 
    } 

    return 0; 
} 

:私はの線に沿って考えています確認する方法は?

交差する領域を計算するには、矩形が水平および垂直線のみの場合はすばやい方法がありますか?

最後に、これは質問には関係ありませんが、私はコンピュータグラフィックスの数学を見直すことができる良い本/ウェブページに誰かがあるかもしれないアドバイスを感謝します。私はしばらく大学を去り、私はすべてを忘れているように感じる:)!他の誰かがその問題を抱えていますか?

が(注:私は、より複雑なようだし、直接の質問に答えていないthisとは異なるこの質問を見つけました)

+0

どちら側に依存します:フレドリック(彼の答えは私のupvoteを持って、私はこの1つを作ったと同時に、彼の応答を行います。あなたはマイク

編集this page on Wikipedia?

を見てきました –

+4

** if(overlap.IsEmpty)** は でなければなりません** if(!overlap.IsEmpty)** – ReinierDG

答えて

11

たぶん私はあなたの質問を誤解するが、Rectangle.Intersect方法は仕事をしないのですか?交差領域を返します。そして、その領域を簡単に計算することができます。

+0

はい、それはありがとうございます:)。ありがとう! – Evan

1

基本的な衝突検出のようなサウンドです。 、水平長方形が縦長の長方形である

+0

ありがとう、私はサイトをチェックアウトします! – Evan

関連する問題