二维对象对齐包围盒相交测试


9

我有两个与对象对齐的边界框(即未与轴对齐,它们随对象一起旋转)。我想知道两个对象对齐的框是否重叠。(编辑:注意-我使用的是轴对齐的边界框测试来快速丢弃远处的对象,因此,quad例程是否稍慢一点都没有关系。

我的盒子存储为四个x,y点。我一直在寻找答案,但是我无法理解示例中的变量名和算法以将其应用于我的特定情况。

有人可以帮助我以简单明了的方式告诉我如何进行吗?谢谢。(特定的语言并不重要,可以使用C样式的伪代码。)

Answers:


5

如果您知道在哪里看,那很容易。您正在寻找oobb。转到此处:http : //www.realtimerendering.com/intersections.html
在这里,您可以找到该站点的链接 http://www.geometrictools.com/LibMathematics/Intersection/Intersection.html
,并找到正确的代码。(ctrl + f“框的交集(2D)”)

它使用SAT并包含源代码和文章。


我要指出的是几何工具描述的算法。
杰瑞Komppa

我知道这是4年前的事,但总是要解释一下反对意见。这很漂亮,“您的答案在另一座城堡里”,而在第二种情况下,答案似乎根本没有。
Yann 2015年

2

比较简单的方法可能是相对于框A的每一侧测试框B的每个顶点(计算符号距离)。这样,您可以将每个顶点分类为线段的“前面”或“后面”。

如果B的所有顶点都归类为A的某个分段的“前面”,则B和A不会重叠。否则,他们会这样做。

这有点涉及,因此您可以通过使用正方形的边界圆先进行圆圆检查来获得一些性能提升(计算很简单)


我首先要进行轴对齐的边界框测试,以快速丢弃远处的对象……不过,您对四元组测试有更多详细信息吗?
AshleysBrain 2011年

暂时以相同的变换旋转两个四边形,使其中一个四边形最终与轴对齐...然后使用notabe提到的SAT测试。找到结果后,反转旋转以使其恢复原状。
史蒂夫·H
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.