gpt4 book ai didi

c++ - 在计算包围球半径时遇到一点问题

转载 作者:搜寻专家 更新时间:2023-10-31 00:45:48 27 4
gpt4 key购买 nike

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

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

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

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

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

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

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

最佳答案

您的第二种方法应该为您的边界框提供边界球体,但正如您发现的那样,它比盒子以​​外的任何东西都大。

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

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

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

polygon (black), bounding box (red), bounding circle of the poly (green), bounding circle of the box (blue)

关于c++ - 在计算包围球半径时遇到一点问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6083286/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com