2015-03-20 1 views
-1

Этот код принимает координаты двух прямоугольников и находит их пересечение.Confused about rectangles in ruby ​​

def rec_intersection(rect1, rect2) 
    x_min = [rect1[0][0], rect2[0][1]].max 
    x_max = [rect1[1][0], rect2[1][1]].min 
    y_min = [rect1[0][0], rect2[0][1]].max 
    y_max = [rect1[1][0], 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 

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

Я действительно не понимаю. В частности, я хотел бы узнать больше о том, что означает координаты (я знаю, что они являются координатами для левого и правого верха), но может ли кто-нибудь уточнить больше? К чему они относятся? Размер прямоугольника? Или это место? Как прямоугольник с нижней левой координатой [1,1] отличается от прямоугольника с левой нижней левой стороной от [0,0]?

Также я хотел бы знать, почему для того, чтобы найти x_min, используется метод max (и наоборот). Любые разъяснения приветствуются.

+1

Ваше поклонение, прямоугольники обычно определяются путем указания координат для двух противоположных углов. В вашем примере 'rect1 = [[1,1], [2,2]]', поэтому '[1,1]' будет координатой для верхнего левого угла, а '[2,2]' будет координата в нижнем правом углу. Таким образом, два других угла были бы на '[1,2]' (вверху справа) и '[2,1]' (внизу слева). –

+0

, поэтому во втором прямоугольнике верхние левые координаты равны [0,0] по сравнению с первым прямоугольником в верхнем левом углу [1,1] ... так что это говорит о прямоугольниках? что они отличаются по размеру или местоположению? ... так как они оба являются верхними левыми – HolyMoly

+1

@HolyMoly оба. Похоже, что вы должны потратить некоторое время на то, чтобы догнать Пифагора или Декарта. –

ответ

1

Это комментарий, который я удалю после того, как ОП увидит его. Вот график двух прямоугольников, где rect1 содержится в пределах rect2.

enter image description here

Ранее, когда я говорил [1,1] и [2,2] как «верхний левый» и «правый нижний» углы, соответственно, rect1, который должен был «нижний левый» и " верхние правые "углы.

+0

Спасибо! это потрясающе! – HolyMoly