Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
3年前关闭。
假设我有5个矩形,每个矩形有4个参数,
这些是x,y,宽度,高度。 x和y->开始协调,w和h->边缘。我们如何计算交叉口面积?
要找到
要找到
要找到
要找到
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
3年前关闭。
假设我有5个矩形,每个矩形有4个参数,
这些是x,y,宽度,高度。 x和y->开始协调,w和h->边缘。我们如何计算交叉口面积?
int rectangle[5][4];
int calculate_intersection(){
....
return total;
}
最佳答案
您将要迭代制作新的矩形,每个矩形都是前一个的交集。假设您有四个矩形,称它们为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
是将所有四个矩形R1, R2, R3,
和R4
相交的结果。我确定您现在将知道在给定这些值的情况下如何计算面积。
::提示和寻找相交的伪代码::
鉴于这些矩形可能相对于彼此处于任何方向和位置,我们需要做一些工作来确定点之间的相对位置。通常,我们将使用MAX
和MIN
函数,或者您可以使用以下单行代码:
int max = (a>b) ? a : b;
int min = (a<b) ? a : b;
max
此处将保留a
或b
的值,以较大者为准,而'min'将保留较小的值。现在,我们可以解决我们的问题了。要找到
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
10-08 04:13