2009-10-11 71 views
12

編輯:尋找兩個矩形(在C#)的重疊區域

我用來解決的情況下,任何人有興趣(感謝弗雷德裏克)問題

簡單代碼:

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

原題:

我想知道和一個快速和骯髒的方法來檢查,如果兩個矩形重疊,如果他們這樣做計算重疊的區域。爲了好奇心,我對以下情況感興趣:1)兩個矩形中的所有線條都是垂直或水平的,或者2)任何兩個矩形的一般情況,但我真正需要的唯一答案是情況1.

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

    return 0; 
} 

對於A.Intersects()我用的是分離軸測試的思考,但如果矩形只有水平和垂直線條是否有一個更簡單的(快):我的線沿線的思考檢查方法?

並計算在它們交叉有一個快速的方法,如果只矩形水平線和垂直線做它的區域?

最後,這與問題無關,但我會感謝任何人可能有一個好的書/網頁的建議,我可以審查計算機圖形學的數學。我已經離開了大學一段時間,覺得我忘記了一切:)!任何人都有這個問題?

(注:我發現這個問題比this這似乎更復雜,不直接回答這個問題不同。)

+0

水平矩形是一個豎長方形,取決於哪一方你考慮頂部 – 2009-10-11 17:57:08

+4

** if(overlap.IsEmpty)** 應該是 ** if(!overlap.IsEmpty)** – ReinierDG 2010-06-16 11:28:30

回答

11

也許我誤解你的問題,但不將Rectangle.Intersect方法做這項工作?它返回相交區域,然後你可以很容易地計算出它的面積。

+0

是的,這是完美的:)。謝謝! – Evan 2009-10-11 18:05:46

1

聽起來像基本的碰撞檢測。你有邁克

看着 this page on Wikipedia?

編輯:弗雷德裏克讓他在我做這一個相同的時間響應,他的回答得到了我給予好評(:

+0

謝謝,我會查看該網站! – Evan 2009-10-11 18:06:49