返回两个矩形交集的函数

时间:2014-05-03 10:19:27

标签: ruby function rectangles

编写一个函数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

有人可以帮忙解释一下这段代码吗?至少有一点指导,从几个点开始解构这个代码,这样我就可以开始了。我从来没有见过像这样的问题,并且在过去的一小时里一直在努力去理解它,并且无法取得任何进展。

1 个答案:

答案 0 :(得分:1)

两个矩形的交点是两个重叠的矩形。因此,您需要一个矩形:

  • 左侧最右边,
  • 最右边的一面,
  • 顶部的最底部,
  • 最底部的底部。

换句话说,您希望左侧,右侧,顶部和底部最接近中心,但计算方式过多。所以,这些是你的四个x_min(等)行。

但是,如果矩形根本不重叠,则没有交叉点。这是你的return nil行。我们怎么知道没有重叠?左右或顶部和底部不是我们期望的那样。

最后一行只是将坐标(从前四行)组装成指定的左上角和右下角。