测试Cube是否在Sphere内部 - 最快的方法

时间:2013-08-15 10:38:39

标签: geometry hittest octree

是否有更快的方法来检查轴对齐的立方体是否在球体内部而不是单独测试8个角是否在球体内?

我正在穿过八叉树,检查它的立方体叶子是否在球体内相交或封闭。我在这里找到了一种交叉方法:Cube sphere intersection test?

我希望找到一种更有效的方法来测试封闭性。我最终需要的是一个返回三种状态之一的测试:

  1. 在Sphere之外
  2. 相交球体
  3. 在Sphere内部
  4. 立方体由两个点定义,即球体的中心点和半径。

2 个答案:

答案 0 :(得分:3)

要查找立方体是否完全位于球体内,您可以只测试一个顶点 - 距离球体中心最远的顶点。您可以通过比较立方体和球体的中心点来确定要测试的顶点。 例如,给定一个以(cx,cy,cz)为中心,边长半长为l的立方体,以及(sx,sy,sz)半径为r的球体,测试点将为

tx = cx + ( cx > sx ? l : -l );
ty = cy + ( cy > sy ? l : -l );
tz = cz + ( cz > sz ? l : -l );

然而,测试立方体对角球的角落将无法捕捉到所有交叉的情况 - 考虑从(-5,-5,-5)到(5,5,5)的立方体和(0)处的球体半径为2的两个体积相交,但球体内没有顶点。

我会采用多遍方法:

  1. 检查球体的轴对齐边界框与立方体的对比 - 非常简单的检查与快速拒绝 明显不相交的案件。
  2. 检查球体中心是否位于立方体内
  3. 您的系统可能会排除这种可能性,但您应该这样做 还可以对球体的情况进行边界框检查 完全在立方体内。
  4. 此时,除了继续检查intersections between the sphere and the cube faces之外别无选择。
  5. 为了走八角树的目的,我会被诱惑只是将球体视为轴对齐的边界框并以小的假阳性率生活。我不会惊讶地发现这比获得绝对正确的交叉结果更快。

答案 1 :(得分:0)

您可以测量从立方体中心到球体中心的距离。连同立方体对角线的长度和球体的半径,您可以确定立方体在球体内部是否存在。