2010-01-24 3 views
3

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

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

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

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

Прямоугольник-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)

+0

Я могу рассказать вам, как это сделать в 3D-пространстве ... он будет работать и в 2D, но я не знаю, приемлемо ли это для вас. В основном идея состоит в том, чтобы взглянуть на 2 плоскости, в которых расположены прямоугольники. Найдите пересечение этих плоскостей и посмотрите, пересекает ли линия, которая пересекает плоскости, с обоими прямоугольниками ... Хотите услышать математику? – Cipi

+0

Меня очень интересует математика. Я понимаю, что вы говорите, и я могу вычесть математику, но я не могу ее выпустить ... Будет ли менее 2d-подход на мощности процессора? – Ropstah

+0

CPU мощность ?! Вы можете рассчитать это на CPU Casio Watch. xD Это действительно простая математика ... Позвольте мне проверить это, что я имею в виду. Вы создаете его на языке C-like OO? – Cipi

ответ

3

Во-первых, вычислить х и диапазон у каждого прямоугольника (потому что у вас есть геометрия тор сделать мод gridsize).

Таким образом, учитывая ваш Прямоугольник-1, вычислите:

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

Same для Прямоугольник-2:

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

Создание х и у "регионов" для каждого прямоугольника:

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

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

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

Смежные вопросы