Как рассчитать пересечение двух кубоидов - PullRequest
1 голос
/ 12 декабря 2011

Я хочу написать метод для моего класса Cuboid, который возвращает кубоид, определенный пересечением двух кубоидов.

Кубоид внутренне представлен точкой начала и точкой конца, такой, что вектор изначало конечной точки обязательно положительно во всех измерениях.

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

def intersects? other_cuboid
  return not( self.top < other_cuboid.bottom ||
              self.bottom > other_cuboid.top ||
              self.left > other_cuboid.right ||
              self.right < other_cuboid.left ||
              self.front < other_cuboid.back ||
              self.back > other_cuboid.front )    
end

Интуитивно кажется, что должно быть довольно экономное решение этой проблемы, но я не могу думать об этом ... какие-либо идеи?

Примечание: кубоиды обязательно выровнены по осям

1 Ответ

1 голос
/ 12 декабря 2011

Хорошо, что ваше определение кубоидов зависит от вашего первоначального выбора базиса?

Если все кубоиды начинаются с начала координат и затем движутся в положительном направлении каждой оси, то это пересечение не толькоминимум всех координат в каждом направлении?то есть пересечение = min (left1, left2), min (right1, right2) и т. д. Не уверен, что я точно понимаю, какие у вас кубоиды, или какими вы хотите их видеть.

В качестве альтернативы, если ваши кубоиды выровнены вкаждое направление (как оно выглядит в вашем определении), тогда вы можете взять новый кубоид, чтобы иметь:

bottom = max(bottom1, bottom2)
top = min(top1, top2)
left = right_most(left1, left2)

и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...