我已经理解了矩形情况下的算法,但我对带有x,y,z和高度作为值的方框感到困惑。不重叠的条件是 1)方框A上方的方框A. 2)框B下面的方框A. 3)方框B左边的方框B. 4)方框B右边的方框
我说错了吗?请引导一些遗漏点。
答案 0 :(得分:21)
当且仅当所有轴的投影重叠时,两个轴对齐的框(任何尺寸)重叠。轴的投影就是该轴的坐标范围。
上图中的蓝色和绿色框重叠,因为它们对两个轴的投影重叠。蓝色和橙色框不重叠,因为它们对x轴的投影不重叠(注意它们对y轴的投影做重叠)。绿色和橙色框不重叠,因为它们对y轴的投影不重叠(而它们与x轴的投影重叠)。
因此,当谈到1D盒子(间隔)的代码时,我们有:
box1 = (xmin1, xmax1)
box2 = (xmin2, xmax2)
overlapping1D(box1,box2) = xmax1 >= xmin2 and xmax2 >= xmin1
对于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)
对于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)
答案 1 :(得分:2)
if(xMin1 <= xMax2 || xMax1 >= xMin1)
if(yMin1 <= yMax2 || yMax1 >= yMin1)
if(zMin1 <= zMax2 || zMax1 >= zMin1)
所有这些条件必须适用于不重叠的方框。
我还假设盒子边缘可以放在相同的x,y,z坐标上。
如果没有,只需取出相同的标志。
if(xMin1 < xMax2 || xMax1 > xMin2)
if(yMin1 < yMax2 || yMax1 > yMin2)
if(zMin1 < zMax2 || zMax1 > zMin2)