区域重叠算法
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