如何检查实心矩形框是否是实心球的子集

时间:2011-09-19 03:28:26

标签: subset

假设我们已经给出了实心矩形框中心的坐标,框的长度,宽度,高度以及具有给定中心和半径的实心球。

是否有 快速 方式来检查该框是否是球的子集?我想到的唯一简单方法是检查8个角顶点中的每一个是否位于球体内。如果是,则该框确实是球的子集(通过球的凸性属性)。

2 个答案:

答案 0 :(得分:0)

只有4个角要检查,但事实上你只需要检查2个彼此对角的角。这是从具有直边的矩形的属性得出的,而圆是凸的,如你所述。

或者,考虑如果左上角和右下角都在圆内,则它们形成的矩形为boudning box。圆圈显然不是,因此矩形必须是圆的子区域。

编辑:你可能在谈论一个盒子和一个球体,在这种情况下适用相同的想法,你只需要选择具有不同x,y和z值的点

答案 1 :(得分:0)

如果您希望大多数情况下盒子不在球体内,您可以进行一些快速测试:

if (sphere.center.x+sphere.radius<box.center.x-box.size.x) return false;
if (sphere.center.x-sphere.radius>box.center.x+box.size.x) return false;
etc.

如果您希望盒子通常远离球体,您可以进行其他快速测试:

bsx = box.size.x;
bsy = box.size.y;
bsz = box.size.z;
box_radius = sqrt(bsx*bsx+bsy*bsy+bsz*bsz)/2;
brx = box.center.x-sphere.center.x;
bry = box.center.y-sphere.center.y;
brz = box.center.z-sphere.center.z;
box_dist = sqrt(brx*brx+bry*bry+brz*brz);
if (box_radius+box_dist<sphere.radius) return true;

如果快速测试失败,您仍然需要更精确的测试。