检查两个框是否重叠的算法

Ati*_*ska 11 algorithm

我已经理解了矩形情况下的算法,但我对x,y,z和高度作为给定值的方框感到困惑.不重叠的条件是1)方框A在方框B之上2)方框A在方框B之下3)方框A左方框B 4)方框A方框B右边

我对么?请指导一些遗漏点.

cop*_*roc 28

当且仅当所有轴的投影重叠时,两个轴对齐的框(任何尺寸)重叠.对轴的投影就是该轴的坐标范围.

在此输入图像描述

上图中的蓝色和绿色框重叠,因为它们对两个轴的投影重叠.蓝色和橙色框不重叠,因为它们对x轴的投影不重叠(注意它们与y轴的投影确实重叠).绿色和橙色框不重叠,因为它们对y轴的投影不重叠(而它们与x轴的投影确实重叠).

因此,当谈到1D盒(间隔)的代码时,我们有:

box1 = (xmin1, xmax1)
box2 = (xmin2, xmax2)
overlapping1D(box1,box2) = xmax1 >= xmin2 and xmax2 >= xmin1
Run Code Online (Sandbox Code Playgroud)

对于2D盒子(矩形),我们有:

box1 = (x:(xmin1,xmax1),y:(ymin1,ymax1))
box2 = (x:(xmin2,xmax2),y:(ymin2,ymax2))
overlapping2D(box1,box2) = overlapping1D(box1.x, box2.x) and 
                           overlapping1D(box1.y, box2.y)
Run Code Online (Sandbox Code Playgroud)

对于3D盒子,我们有:

box1 = (x:(xmin1,xmax1),y:(ymin1,ymax1),z:(zmin1,zmax1))
box2 = (x:(xmin2,xmax2),y:(ymin2,ymax2),z:(zmin2,zmax2))
overlapping3D(box1,box2) = overlapping1D(box1.x, box2.x) and 
                           overlapping1D(box1.y, box2.y) and
                           overlapping1D(box1.z, box2.z)
Run Code Online (Sandbox Code Playgroud)

  • `isOverlapping = (x1min < x2max && x2min < x1max && y1min < y2max && y2min < y1max)` ...这更像是它 (3认同)