这个算法称作Arvo's algorithm。
首先假设一个aabb,称作B,我们要计算B上距离空间任意点q的距离最短的点。方法就是按一定顺序,沿着每条轴,将q推向B。
算法描述如下:
if(x<minX)
x=minX;
elseif (x>maxX)
x=maxX;
if(y<minY)
y=minY;
elseif (y>maxY)
y=maxY;
if(z<minZ)
z=minZ;
elseif (z>maxZ)
z=maxZ;
x=minX;
elseif (x>maxX)
x=maxX;
if(y<minY)
y=minY;
elseif (y>maxY)
y=maxY;
if(z<minZ)
z=minZ;
elseif (z>maxZ)
z=maxZ;
如果点q在B内,这返回的x,y,z是q点的坐标。
之后我们比较x,y,z到球心的距离(或者平方距离),来决定球体和aabb是否相交。