2009-12-04 103 views

回答

4

我假設你實際上想要交集的結果,而不僅僅是測試兩個矩形是否相交。

Rect1的的交點=(L1,T1,R1,b1)和RECT2 =(L2,T2,R2,B2)又是一個矩形:

rectIntersection = (max(l1, l2), max(t1, t2), min(r1, r2), min(b1, b2)) 

rectIntersection當然是空的,如果left >= right || top >= bottom假設一個矩形是左/頂端和右/底排他。

的矩形相交如果

l1 < r2 && l2<r1 && t1<b2 && t2<t1 
+0

分離軸版本更有效率,這個版本意味着你將永遠需要做四個比較。 – 2009-12-04 10:24:56

+0

+您必須至少執行一次額外的測試才能查看生成的矩形是否爲空。這意味着這個版本是5-6個條件,而SAT版本是1-4。 – 2009-12-04 10:26:21

+0

我確實認爲海報實際上是想要得到的一組相交點,而不是隻有在相交時才進行測試。根據上下文,計算交叉點並聲明它不爲空可能更好。 – Sebastian 2009-12-04 10:40:35

2

假設原點位於屏幕的left-top

如果檢查一個矩形(x3,y3)的左上角是否小於另一個矩形(x2,y2)的右下角,則兩者相交。

積分是(x2,|y2-y3|)(|x2-x3|,y2)

這是矩形1右邊的rectangle1和reactangle2。

將反轉應用於左側翻譯。

1

兩個矩形重疊是至少有一個共同的兩個內部點X,Y.讓第一個可交替的是{T1, L1, B1, R1}和第二個{T2, L2, B2, R2}(頂部,左側,底部,右側)。現在接着是(X>L1)(X<R1)(Y>T1)(Y<B1),並且類似地對於矩形2.從(X>L1)(X<R2)得出(L1<R2)。同樣,(L2<R1),(T1<B2)(T2<B1)

這4個條件是必要的。這並不是直接顯而易見的,它們也是足夠的,但情況也是如此。

0

如果您有興趣更多的功能,在Windows上做的工作,而不是實現一個算法,
退房IntersectRect Function