假设我有5个矩形,每个矩形有4个参数, 这些是x,y,宽度,高度。 x和y - >开始协调,w和h - >边缘。我们如何计算交叉区域?
int rectangle[5][4];
int calculate_intersection(){
....
return total;
}
答案 0 :(得分:-1)
您需要迭代地创建新的矩形,每个矩形都是前一个的交集。我们假设你有四个矩形,称Ri
i
为1, 2, 3,
或4
。让我们调用交叉矩形I4
,作为4个矩形的交集。
首先,我们希望与R1
和R2
相交。将生成的width
,height
,x
和y
保存到I4
。
接下来,我们希望与R3
和I4
相交。将生成的width
,height
,x
和y
保存到I4
。
然后我们想要与R4
和I4
相交。将生成的width
,height
,x
和y
保存到I4
。
此时I4
是交叉所有4个矩形R1, R2, R3,
和R4
的结果。我相信你现在知道如何计算给定这些值的区域。
::用于查找交集的提示和伪代码::
鉴于矩形可能处于相对于彼此的任何方向和位置,我们需要做一些工作来确定点相对于彼此的位置。通常,我们会使用MAX
和MIN
功能,或者您可以使用这些单行:
int max = (a>b) ? a : b;
int min = (a<b) ? a : b;
max
此处将保留a
或b
的值,以较大者为准,以及&#39; min&#39;将持有较小的。现在有了这个我们可以解决我们的观点。
要查找I4
x
- 值,我们需要获取x中Ri
和Rj
矩形的最大值方向:I4x = max{Ri_x, Rj_x}
要查找I4
y
- 值,我们需要获取y中Ri
和Rj
矩形的最大值方向:I4y = max{Ri_y, Rj_y}
要查找I4
width
- 值,我们需要获取Ri
和Rj
矩形总分的最小值宽度,但是我们需要减去最终移位的x
位置:I4w = min{Ri_x + Ri_w, Rj_x + Rj_w} - I4_x
要查找I4
height
- 值,我们需要采用Ri
和Rj
矩形的最小值总高度并减去最终移位的y
位置:I4w = min{Ri_y + Ri_h, Rj_y + Rj_h} - I4_y