Point in OBB (Oriented Bounding Box) algorithm?

匿名 (未验证) 提交于 2019-12-03 02:52:02

问题:

Given a center point, width, height and angle forming an OBB, how can I find if a given point P is inside the OBB?

Thanks

回答1:

I take it that the wrinkle in your problem is that the bounding box can be rotated? If so, the easiest solution to me seems to be to do all calculations in the rotated coordinate plane, centered on the center of the bounding box.

To calculate the coordinates of the point relative to these axes:

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

(you may need to adjust this depending on how angle is supposed to be measured, I'll leave that to you, since you didn't specify)

Then hit test, the normal way:

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


回答2:

You could transform the coordinates of your test point (via a transformation matrix) into a rotated coordinate system based on the angle of the bounding box.

At this stage it should just be an axis-aligned point-in-rectangle test, i.e. compare against xmin, xmax, ymin, ymax. In the rotated coordinate system xmin, xmax = xmid -+ width/2 and ymin, ymax = ymid -+ height/2.

Hope this helps.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!