2011-07-26 62 views
4

我試圖執行以下操作。我有兩個邊界A和B,我想對B框進行變換,以便A和B之間的交點不再存在。我不知道如何計算轉變,我想保持方向,即紅線。轉換邊界框以刪除交集

Bounding Boxes

沒有寫太多的代碼,很堅持的數學。

var a = new Rectangle(40, 40, 20, 20); 
var b = new Rectangle(25, 30, 20, 20); 
+0

只需檢查:構造函數是(左,下,長,高)? – Jodaka

+0

矩形的構造函數是(x,y,寬度,高度) –

+0

這就是哪個角落的(x,y)?左下角? – Jodaka

回答

1

所以對於您所提供的情況,在b.x(DX)移位可以計算爲a.x - b.length - b.x。 b.y(dy)的變化可以通過保持斜率不變來計算。因此,在dx/dy = (a.x - b.x)/(a.y - b.y)中解決dy問題,這也會讓你改變y。

但是,這是特定於您所描述的情況。除此之外,你需要考慮如果A和B被翻轉會發生什麼,如果A.x = B.x會發生什麼,如果A.y = B.y會發生什麼,以及如果x的差異小於y的差異會發生什麼。繪製圖片可能會非常有幫助,如果你有圖紙,可以在空白的電腦紙上繪製,如果你沒有。希望這是一個好的開始。

+0

謝謝你你回答,在我的例子中,x的差異小於y的差異。在你的計算中,他們必須保持一致嗎? –

+0

這取決於您是否想要最終產品接壤與否。如果他們必須分開,那沒關係。如果他們仍然需要觸摸,並且x的變化小於y的變化,則在公式中切換所有的x和y(即先查找dy,然後找到dx,然後查找dx) 。如果你看看你繪製的例子,如果你首先通過向上移動發現y,直到這些方框不再重疊,然後向左移動以保持角度,那麼你的方框將不再接觸。 – Jodaka