區域重疊演算法
1. 求兩矩形是否重疊的演算法,思路。答出再加50分
1.
計算寬度之和、高度之和,如果寬度和較大則先處理2.1,否則先處理2.2
2.1.
按照寬度從小到大排列,寬度相同的矩形拼成更大的矩形
2.2.
按照高度做相同的處理
3.
重復以上步驟,直到沒有寬、高相同的矩形
1.
計算寬度之和、高度之和,如果寬度和較大則先處理2.1,否則先處理2.2
2.1.
按照寬度從小到大排列,找出兩個矩形,使得拼接後的「矩形」面積中空缺部分最小(較可能是寬度相差較小的兩個矩形)。
2.2.
按照高度做相同的處理
3.
重復以上步驟,直到只剩下一個矩形(最終解)
以上兩段其實是一個意思:盡量用較小的「面積損失」最大限度的減少待處理矩形數。只是第一段是特例,也就是無「面積損失」的拼接。
不過,一般來說,這不會是最優解。
2. 你說的java中關於圖形重疊的演算法是哪個呀
只要是實現了Shape介面,就會實現這個intersects()方法。
intersects
boolean intersects(Rectangle2D r)測試 Shape 內部是否與指定 Rectangle2D 內部相交。在下列情況下,Shape.intersects() 方法允許 Shape 實現謹慎地返回 true:
Rectangle2D 與 Shape 相交的可能性很大,但是
精確確定相交的計算代價太高。
這意味著對於某些 Shape,即使 Rectangle2D 沒有與該 Shape 相交,此方法也可能返回 true。如果需要更精確的答案,由於 Area 類比大多數 Shape 對象更為准確地計算幾何相交,因此可以使用該類。
另外:Shape介面中也有重載方法intersects:
boolean intersects(double x,
double y,
double w,
double h)測試 Shape 內部是否與指定矩形區域的內部相交。如果任何一個點既包含在 Shape 內,又包含在指定矩形區域內,則認為矩形區域與 Shape 相交。
在下列情況下,Shape.intersects() 方法允許 Shape 實現謹慎地返回 true:
矩形區域與 Shape 相交的可能性很大,但是
精確確定相交的計算代價太高。
這意味著對於某些 Shape,即使矩形區域沒有與該 Shape 相交,此方法也可能返回 true。如果需要更精確的答案,由於 Area 類比大多數 Shape 對象更為准確地計算幾何相交,因此可以使用該類。
參數:
x - 指定矩形區域左上角的 X 坐標
y - 指定矩形區域左上角的 Y 坐標
w - 指定矩形區域的寬度
h - 指定矩形區域的高度
返回:
如果 Shape 的內部區域與矩形的內部區域相交,或者相交的可能性很大且執行計算的代價太高,則返回 true;否則返回 false。
從以下版本開始:
1.2
3. VB 求演算法 兩個矩形重疊部分
假定第一個矩形的坐標為x1,y1,寬高為w1,h1,第二個矩形的坐標為x2,y2,寬高為w2,h2:
If X2 > X1 And X2 < X1 + w1 And Y2 > Y1 And Y2 < Y1 + h1 Then
MsgBox "兩個矩形有重疊,重疊區域:x=" & X2 & " y=" & Y2 & " w=" & X1 + w1 - X2 & " h=" & Y1 + h1 - Y2
ElseIf X1 > X2 And X1 < X2 + w2 And Y2 > Y1 And Y2 < Y1 + h1 Then
MsgBox "兩個矩形有重疊,重疊區域:x=" & X1 & " y=" & Y2 & " w=" & X2 + w2 - X1 & " h=" & Y1 + h1 - Y2
ElseIf X2 > X1 And X2 < X1 + w1 And Y1 > Y2 And Y1 < Y2 + h2 Then
MsgBox "兩個矩形有重疊,重疊區域:x=" & X2 & " y=" & Y1 & " w=" & X1 + w1 - X2 & " h=" & Y2 + h2 - Y1
ElseIf X1 > X2 And X1 < X2 + w2 And Y1 > Y2 And Y1 < Y2 + h2 Then
MsgBox "兩個矩形有重疊,重疊區域:x=" & X1 & " y=" & Y1 & " w=" & X2 + w2 - X1 & " h=" & Y2 + h2 - Y1
Else
MsgBox "兩個矩形沒有重疊"
End If