Ruby 中的矩形交集

Rectangle intersection in Ruby

我试图理解这个程序,但遇到了一些困难。我不明白 x_miny_minx_maxy_max 的部分。

我理解程序通过了两个矩形,分别是左下角和右上角的坐标点,但是数组索引[0][0][1][1]等是从哪里来的?

我对发生的事情感到困惑,所以解释会有所帮助。

# Write a function, `rec_intersection(rect1, rect2)` and returns the
# intersection of the two.
#
# Rectangles are represented as a pair of coordinate-pairs: the
# bottom-left and top-right coordinates (given in `[x, y]` notation).
#
# Hint: You can calculate the left-most x coordinate of the
# intersection by taking the maximum of the left-most x coordinate of
# each rectangle. Likewise, you can calculate the top-most y
# coordinate of the intersection by taking the minimum of the top most
# y coordinate of each rectangle.
#
# Difficulty: 4/5
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

puts rec_intersection(
      [[0, 0], [2, 1]],
      [[1, 0], [3, 1]]
    ) == [[1, 0], [2, 1]]

puts rec_intersection(
      [[1, 1], [2, 2]],
      [[0, 0], [5, 5]]
    ) == [[1, 1], [2, 2]]


puts rec_intersection(
      [[1, 1], [2, 2]],
      [[4, 4], [5, 5]]
    ) == nil

puts rec_intersection(
      [[1, 1], [5, 4]],
      [[2, 2], [3, 5]]
    ) == [[2, 2], [3, 4]]

What I don't get in particular is the part with x_min, y_min, x_max, y_max. I get the the program passes through 2 rectangles with the bottom left and top right coordinate points. But where do the array indices come from? [0][0] , [1][1], etc?

这段代码上面的注释很重要,理解这个:

# Rectangles are represented as a pair of coordinate-pairs: the
# bottom-left and top-right coordinates (given in `[x, y]` notation).

所以,如果rect是一个矩形,那么rect[0]代表左下角,rect[1]代表右上角。此外,rect[0][0] 表示左下角的 x 坐标,rect[0][1] 是该角的 y 坐标,依此类推。

这一段评论也很重要:

# Hint: You can calculate the left-most x coordinate of the
# intersection by taking the maximum of the left-most x coordinate of
# each rectangle. [...]

如果rect是一个矩形,则该矩形最左边的x坐标是左下角的x坐标。如上所述,rect[0][0] 表示左下角的 x 坐标。所以,在这一行中:

x_min = [rect1[0][0], rect2[0][0]].max

rect1[0][0]rect2[0][0]是矩形最左边的两个x坐标,这行代码是说两个矩形的交点最左边的x坐标等于其中较大的一个。

变量x_minx_maxy_miny_max用于存储相交区域的坐标。它们是使用传入的矩形在二值数组上使用 maxmin 获得的。例如,调用 [1 ,2].max 将 return 2,调用 [1,2].min 将 return 1

这些变量表示相交矩形的原因,通过一张图可能更容易理解(非常详细和专业的图表来袭):

可以看到,黄色(相交)矩形的最小值可以不小于红色矩形的最小值。最大值不能小于蓝色矩形的最大值。

基本上,当它寻找 x_min 的最大值或 x_max 的最小值时,它会先询问 "which array of x values",然后再询问 "which value"。

代码 x_min = [rect1[0][0], rect2[0][0]].max

就是专门找[rect1[第一个数组(0)][第一个值(0)]