编写一个函数rec_intersection(rect1, rect2)
并返回
两者的交集。
矩形表示为一对坐标对:
左下角和右上角坐标(以[x, y]
表示法给出)。
提示:您可以计算最左侧的x坐标 通过取最左边的x坐标的交点 每个矩形。同样,您可以计算最顶层的y 采用最顶部的最小值来确定交叉点的坐标 每个矩形的y坐标
这就是答案:
def rec_intersection(rect1, rect2)
x_min = [rect1[0][0], rect2[0][0]].max
x_max = [rect1[1][0], rect2[1][0]].min
y_min = [rect1[0][1], rect2[0][1]].max
y_max = [rect1[1][1], rect2[1][1]].min
return nil if ((x_max < x_min) || (y_max < y_min))
return [[x_min, y_min], [x_max, y_max]]
end
有人可以帮忙解释一下这段代码吗?至少有一点指导,从几个点开始解构这个代码,这样我就可以开始了。我从来没有见过像这样的问题,并且在过去的一小时里一直在努力去理解它,并且无法取得任何进展。
答案 0 :(得分:1)
两个矩形的交点是两个重叠的矩形。因此,您需要一个矩形:
换句话说,您希望左侧,右侧,顶部和底部最接近中心,但计算方式过多。所以,这些是你的四个x_min
(等)行。
但是,如果矩形根本不重叠,则没有交叉点。这是你的return nil
行。我们怎么知道没有重叠?左右或顶部和底部不是我们期望的那样。
最后一行只是将坐标(从前四行)组装成指定的左上角和右下角。