Рассчитать перекрытие между двумя прямоугольниками на сетке х / у? - PullRequest
3 голосов
/ 24 января 2010

Мне нужно рассчитать перекрытие (количество или да / нет), которое два прямоугольника образуют на специальной сетке х / у. Сетка 500х500, но стороны и углы соединяются (непрерывно). Таким образом, следующая точка после 499 снова становится 0.

В предыдущем вопросе я попросил способ вычислить расстояние между двумя точками в этой сетке. Это оказалось евклидово расстояние:

sqrt(min(|x1 - x2|, gridwidth - |x1 - x2|)^2 + min(|y1 - y2|, gridheight - |y1-y2|)^2)

Каков хороший математический способ вычисления, если два прямоугольника (определенные точкой (x, y), шириной и высотой) перекрываются в этой сетке?

Прямоугольник-1 ([x=0,y=0], w=20, h=20) и Прямоугольник-2 ([x=495,y=0], w=10, h=10) должны иметь перекрытие. Перекрывающийся прямоугольник (не обязательно, но) должен быть ([x=0,y=0], w=5, h=10)

1 Ответ

3 голосов
/ 24 января 2010

Сначала вычислите диапазон x и y для каждого прямоугольника. (потому что у вас есть геометрия тора, сделайте это с помощью размера сетки).

Итак, учитывая ваш Rectangle-1, вычислите:

x1 = x = 0, x2 = x + w = 20
y1 = y = 0, y2 = y + h = 20

То же самое для Rectangle-2:

x3 = 495, x4 = 505 mod 500 = 5
y3 = 0,   y4 = 10

Создайте x и y «регионы» для каждого прямоугольника:

Reactangle-1: x-regions: (0, 20)
              y-regions: (0, 20)

Rectangle-2:  x-regions: (495, 500), (0, 5)
              y-regions: (0, 10)

Если какие-либо (оба) x и y области между двумя прямоугольниками имеют ненулевое пересечение, тогда ваши прямоугольники перекрываются. Здесь (0, 20) x-область Rectangle-1 и (0, 5) x-область Rectangle-2 имеют ненулевое пересечение, как и (0, 20) и (0, 10) y -области.

...