2010-01-24 75 views
3

我需要计算两个矩形在特殊的x/y网格上产生的重叠(数量或是/否)。网格是500x500,但边和角连接(是连续的)。所以499之后的下一个点再次变为0。计算x/y网格上两个矩形之间的重叠?

在上一个问题中,我要求一种方法来计算这个网格中两点之间的距离。这原来是欧几里德距离:

sqrt(min(|x1 - x2|, gridwidth - |x1 - x2|)^2 + min(|y1 - y2|, gridheight - |y1-y2|)^2) 

什么是如果两个矩形计算的良好的数学方法(通过点(x定义,y)的,宽度和高度)在此网格有重叠?

矩形-1([x=0,y=0], w=20, h=20)和矩形-2([x=495,y=0], w=10, h=10)应该有重叠。重叠的矩形(不是真的需要,但)应为([x=0,y=0], w=5, h=10

+0

我可以告诉你如何在3D空间中做到这一点......它也可以在2D中工作,但我不知道它是否可以接受。基本上这个想法是看看矩形所在的2个平面。找到这些平面的交点,看看使平面相交的线是否与两个矩形相交......想要听数学吗? – Cipi 2010-01-24 15:08:39

+0

我对数学很感兴趣。我明白你在说什么,我可以推算出数学,但是我无法完成它...... CPU方面的2D方法会不会更密集? – Ropstah 2010-01-24 15:11:06

+0

CPU电源?!你可以计算一个卡西欧手表CPU。 xD这是非常简单的数学...让我测试一下我的想法。你是用类似C的OO语言制作它的? – Cipi 2010-01-24 15:15:33

回答

3

首先,计算x和y的范围为每个矩形 (因为你有一个圆环形状做MOD gridsize)。

因此,考虑到您的矩形-1,计算:

x1 = x = 0, x2 = x + w = 20 
y1 = y = 0, y2 = y + h = 20 

同样为矩形2:

x3 = 495, x4 = 505 mod 500 = 5 
y3 = 0, y4 = 10 

创建x和y “地区”对于每个矩形:

Reactangle-1: x-regions: (0, 20) 
       y-regions: (0, 20) 

Rectangle-2: x-regions: (495, 500), (0, 5) 
       y-regions: (0, 10) 

如果两个矩形之间的任何(两者)x和y区域具有非空交叉点,那么你的矩形重叠。 这里,矩形-1的(0,20)x区域和矩形-2的(0,5)x区域具有非零交点,所以(0,20)和(0,10) Y型区域。