OBB(定向边界框)算法中的点?

Posted

技术标签:

【中文标题】OBB(定向边界框)算法中的点?【英文标题】:Point in OBB (Oriented Bounding Box) algorithm? 【发布时间】:2011-09-07 03:00:04 【问题描述】:

给定一个形成OBB的中心点、宽度、高度和角度,如何确定给定点P是否在OBB内?

谢谢

【问题讨论】:

【参考方案1】:

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

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

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,50,宽度为 2,而我的命中测试点是 0,50,那么这将失败,因为盒子的角度将是 90 度,并且 0,50 旋转了-90 哪个将不再在框内?【参考方案2】:

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

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

希望这会有所帮助。

【讨论】:

以上是关于OBB(定向边界框)算法中的点?的主要内容,如果未能解决你的问题,请参考以下文章

AABB和OBB包围盒简介

顶点定义框算法中的点?

R使用tmaptools为sf对象中的每一行创建边界框

飞行游戏中的碰撞算法-边界框碰撞检测

当测试点位于多边形边缘时,多边形算法中的点返回真

有哪些高效的 Geohash 边界框覆盖算法?