指向OBB(Oriented Bounding Box)算法?

时间:2011-09-07 03:00:04

标签: c++ algorithm geometry

给定形成OBB的中心点,宽度,高度和角度,如何找到给定点P是否在OBB内?

由于

2 个答案:

答案 0 :(得分:8)

我认为问题的皱纹是边界框可以旋转吗?如果是这样,对我来说最简单的解决方案似乎是在旋转坐标平面上进行所有计算,以边界框的中心为中心。

计算相对于这些轴的点的坐标:

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

(您可能需要根据 angle 的测量方式进行调整,我会留给您,因为您没有指定)

然后按正常方式点击测试:

return (newy > centery - height / 2) && (newy < centery + height / 2) 
    && (newx > centerx - width / 2) && (newx < centerx + width / 2);

答案 1 :(得分:0)

您可以根据边界框的角度将测试点的坐标(通过变换矩阵)转换为旋转坐标系。

在这个阶段,它应该是一个轴对齐的矩形点测试,即与xmin, xmax, ymin, ymax进行比较。在旋转坐标系xmin, xmax = xmid -+ width/2ymin, ymax = ymid -+ height/2

希望这有帮助。