计算边界球体半径时遇到一些问题

2024-04-20

我已经设法用两种方法计算边界球体半径,但没有一种方法能够准确地满足我的要求。我不需要“像素”完美边界球,但我想要比我目前拥有的更好的东西。

我正在使用 Wavefront .obj 模型并计算这些模型的边界球半径,我提取当前模型尺寸(我使用 Nate Robbins 的 GLM 库),这将为我提供每个轴上的尺寸。

第一种方法:将每个轴除以 2,这将给出每个轴的半径。最大的一个是我将用于我的边界球的那个。这适用于我的项目特定的大多数对象。它对某些东西不起作用,比如立方体形状的。基本上,如果我有一个立方体并用这种方法计算半径,球体会将立方角留在外面。

第二种方法:将每个轴除以 2,这将给出每个轴的半径。然后我这样做是为了取出边界球体的半径:

r = SQRT(x*x + y*y + z*z)

但这给了我一个相当大的半径。该物体将完全封闭在球体中,但球体相当大,超出了应有的大小。

我不明白我在上面的公式中做错了什么,据我所知,它应该有效。但我显然错了...


第二种方法应该为您提供边界框的边界球,但正如您所发现的,它会比盒子以外的任何物体所需的都要大。

可以通过平移模型点来找到更好的边界球,使它们使用已有的边界框尺寸以原点为中心,然后每个单独的顶点使用以下公式计算该点距原点的半径sqrt(x*x + y*y + z*z)公式。其中最大的就是边界球体的半径。

请注意,这不是最佳边界球。为此,您必须找到模型的凸包,并使用旋转卡尺之类的工具来选择球体的最佳中心点。

为了以 2D 形式显示它,红色轮廓是形状的边界框,蓝色圆圈是框的边界圆。改进后的圆使用多边形顶点,并以方框为中心,为绿色。请注意,黑色多边形的任何点都不接触蓝色圆圈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算边界球体半径时遇到一些问题 的相关文章

随机推荐