2013-12-10 23 views
1

我正在研究一個突破性的克隆,我一直在想如何得到兩個碰撞矩形的交點矩形,以便我可以測量球在x和y軸上進入塊的深度,並決定哪個組件速度我會扭轉。如何從兩個交點構造矩形?

我想我可以計算深度每種情況下是這樣的:

ball collision with blocks

但是,如果我有交集矩形比我woudn't擔心,如果球從打塊左/右頂部/底部(因爲我只會分別反轉x和y軸),從而爲我節省了大量的打字工作。

我看過Pygame's docs,但似乎沒有這方面的功能。我將如何去解決這個問題?

+0

有** lot **這個問題的重複(例如[Rectangle intersection](http://stackoverflow.com/questions/7675201/rectangle-intersection))。請在發佈新問題前使用搜索工具... –

+0

我對Pygame一無所知,但我想它提供了一些方法來獲取矩形的座標/大小?在這種情況下,將任何[現有問題](http://stackoverflow.com/search?q=rectangle+intersection)中提出的任何解決方案翻譯成使用Pygame應該相對簡單... –

回答

5

假設你有矩形r1r2,與.left, .right, .top, and .bottom邊緣,然後

left = max(r1.left, r2.left); 
right = min(r1.right, r2.right); 
top = max(r1.top, r2.top); 
bottom = min(r1.bottom, r2.bottom); 

(與協調增加從上到下的通用慣例和從左到右)。最後,檢查left<righttop<bottom,並計算面積:

Area = (right - left) * (top - bottom); 

另外,可以使用clip()功能。從文檔你在你的問題鏈接:

夾(矩形) - >矩形返回被剪裁成 完全參數矩形內一個新的矩形。如果兩個矩形不重合,則返回0大小的矩形。

+1

You'再右吧。它確實是我想要的。謝謝。 – Jovito

+0

不客氣。有點諷刺的是,我在你鏈接的文檔中找到了'clip()'回答...有時你需要另一組眼睛。一個奇怪的名字 - 但是當我看到他們有'union()'時,我覺得它已經在那裏了,所以我仔細閱讀。 – Floris

+0

是的!你知道,在做谷歌搜索和首先查看文檔之前,我從不提問。當我無法自己解決像這樣的問題時,它讓我感到困擾。我可能認爲''clip''就像''set_clip'',它有一個完全不同的行爲。也許我應該刪除這個問題,你認爲? – Jovito