2

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

我正在穿过一个八叉树,检查它的立方体叶子是否相交或包含在一个球体中。我在这里找到了一种交叉点的方法:立方体球体交叉点测试?

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

  1. 外球体
  2. 相交球体
  3. 球内

立方体由两个点定义,球体由其中心点和半径定义。

4

2 回答 2

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,0, 6)半径为2。两个体积相交,但球体内没有顶点。

我会采用多通道方法:

  1. 检查球体的轴对齐边界框与立方体 - 非常简单的检查,快速拒绝明显不相交的情况。
  2. 检查球心是否在立方体内
  3. 在您的系统中可能排除了这种可能性,但您还应该对球体完全在立方体内的情况进行边界框检查。
  4. 此时,别无选择,只能继续检查球体和立方体面之间的交叉点

不过,出于步行八叉树的目的,我很想将球体视为轴对齐的边界框,并接受较小的误报率。得知这比获得绝对正确的交集结果要快,我一点也不感到惊讶。

于 2013-08-16T07:54:44.090 回答
0

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

于 2013-08-15T10:55:20.543 回答