Точка в алгоритме OBB (Oriented Bounding Box)? - PullRequest
5 голосов
/ 07 сентября 2011

Учитывая центральную точку, ширину, высоту и угол, образующий OBB, как я могу найти, находится ли заданная точка P внутри OBB?

Спасибо

Ответы [ 2 ]

8 голосов
/ 07 сентября 2011

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

Чтобы вычислить координаты точки относительно этих осей:

newy = sin(angle) * (oldy - centery) + cos(angle) * (oldx - centerx);
newx = cos(angle) * (oldx - centerx) - sin(angle) * (oldy - centery);

(вам может потребоваться настроить это в зависимости от того, как угол должен быть измерен, я оставлю это вам, поскольку вы не указали)

Затем нажмите тест, нормальный способ:

return (newy > centery - height / 2) && (newy < centery + height / 2) 
    && (newx > centerx - width / 2) && (newx < centerx + width / 2);
0 голосов
/ 07 сентября 2011

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

На этом этапе это должен быть только тест точки в прямоугольнике с выравниванием по оси, то есть сравнение с xmin, xmax, ymin, ymax. В повернутой системе координат xmin, xmax = xmid -+ width/2 и ymin, ymax = ymid -+ height/2.

Надеюсь, это поможет.

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