这个算法称作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是否相交。