C中的交叉区域

时间:2016-12-04 20:15:05

标签: c arrays

假设我有5个矩形,每个矩形有4个参数, 这些是x,y,宽度,高度。 x和y - >开始协调,w和h - >边缘。我们如何计算交叉区域?

 int rectangle[5][4];

    int calculate_intersection(){
    ....
    return total;
    }

1 个答案:

答案 0 :(得分:-1)

您需要迭代地创建新的矩形,每个矩形都是前一个的交集。我们假设你有四个矩形,称Ri i1, 2, 3,4。让我们调用交叉矩形I4,作为4个矩形的交集。

首先,我们希望与R1R2相交。将生成的widthheightxy保存到I4

接下来,我们希望与R3I4相交。将生成的widthheightxy保存到I4

然后我们想要与R4I4相交。将生成的widthheightxy保存到I4

此时I4是交叉所有4个矩形R1, R2, R3,R4的结果。我相信你现在知道如何计算给定这些值的区域。

::用于查找交集的提示和伪代码::

鉴于矩形可能处于相对于彼此的任何方向和位置,我们需要做一些工作来确定点相对于彼此的位置。通常,我们会使用MAXMIN功能,或者您可以使用这些单行:

int max = (a>b) ? a : b;
int min = (a<b) ? a : b;

max此处将保留ab的值,以较大者为准,以及&#39; min&#39;将持有较小的。现在有了这个我们可以解决我们的观点。

要查找I4 x - 值,我们需要获取x中RiRj矩形的最大值方向:I4x = max{Ri_x, Rj_x}

要查找I4 y - 值,我们需要获取y中RiRj矩形的最大值方向:I4y = max{Ri_y, Rj_y}

要查找I4 width - 值,我们需要获取RiRj矩形总分的最小值宽度,但是我们需要减去最终移位的x位置:I4w = min{Ri_x + Ri_w, Rj_x + Rj_w} - I4_x

要查找I4 height - 值,我们需要采用RiRj矩形的最小值总高度并减去最终移位的y位置:I4w = min{Ri_y + Ri_h, Rj_y + Rj_h} - I4_y