Ruby 中的矩形交集
Rectangle intersection in Ruby
我试图理解这个程序,但遇到了一些困难。我不明白 x_min
、y_min
、x_max
、y_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_min
、x_max
、y_min
、y_max
用于存储相交区域的坐标。它们是使用传入的矩形在二值数组上使用 max
和 min
获得的。例如,调用 [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)]
我试图理解这个程序,但遇到了一些困难。我不明白 x_min
、y_min
、x_max
、y_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_min
、x_max
、y_min
、y_max
用于存储相交区域的坐标。它们是使用传入的矩形在二值数组上使用 max
和 min
获得的。例如,调用 [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)]