Computer science 什么是3D monte carlo积分的巧妙边界框?

Computer science 什么是3D monte carlo积分的巧妙边界框?,computer-science,numerics,Computer Science,Numerics,对于一个项目,我需要计算3D中两个重叠椭球体的重叠体积。该方法本身并不是问题:我基本上是在一个边界框内随机选取点,并检查它们是否同时位于两个椭球体中 在我不断寻求在运行时方面优化程序的过程中,较小的边界框显然是有利的。现在,“长方体”是一个球体,它以椭球体质心之间的中点为中心,直径与最长的椭球体轴相对应。这是完全任意的,我相当确定重叠的体积将始终包含在这个球体中,但我真的想找到一些方法来优化整个过程 是否有一些通用方法来优化边界体积?这不是一个数学问题,而不是CS问题吗?你想要的似乎是一个公式,

对于一个项目,我需要计算3D中两个重叠椭球体的重叠体积。该方法本身并不是问题:我基本上是在一个边界框内随机选取点,并检查它们是否同时位于两个椭球体中

在我不断寻求在运行时方面优化程序的过程中,较小的边界框显然是有利的。现在,“长方体”是一个球体,它以椭球体质心之间的中点为中心,直径与最长的椭球体轴相对应。这是完全任意的,我相当确定重叠的体积将始终包含在这个球体中,但我真的想找到一些方法来优化整个过程


是否有一些通用方法来优化边界体积?

这不是一个数学问题,而不是CS问题吗?你想要的似乎是一个公式,定义两个椭球可能的重叠。当然,您打算使用该公式来提高代码的效率,但就我所知,这与核心问题无关。如果你有这个公式,并试图找出如何把它写成代码,那将是另一回事。也许你应该考虑把这个贴到


在我看来,你可以将你的问题重新定义为“什么是定义三维空间中两个椭球之间可能重叠的体积的公式?”,这与计算无关。

这可能更像是一个数学问题,而不是编程问题,但我认为两个椭球的交点是一个凸面形状,所以也许你可以尝试另一种方法,而不是蒙特卡罗来处理这样一个相对表现良好的对象

首先,你需要(以某种方式)在两个椭球体内找到一个点

现在创建一个以该点为中心的立方体,其大小足以完全包含两个椭球体。沿所有3个轴将立方体细分为8个大小相等的子立方体(创建八叉树的第一步)

在此之后,对子多维数据集应用递归。如果某些立方体角位于两个椭球体内部,而另一些不在椭球体内部,请再次细分立方体。此外,如果立方体面的某些区域在椭球体内部,而其他区域不在椭球体内部,请再次细分

重复到所需的递归深度。可以通过对细分的立方体体积求和来跟踪计算错误

现在,这里的挑战性操作是解决“如果立方体面的某些区域位于两个椭球体内部”。椭球体和平面之间的交点是椭圆。若要检查6个立方体面中的每个面,需要将它们与椭球相交,然后如果其余椭圆都与立方体面重叠,则需要将它们彼此相交。幸运的是,对于二维椭圆重叠测试,您可以更轻松地找到引用

Monte Carlo将通过O(2^n)的努力为您提供n位精度,因此,例如,24位采集1670万个样本。如果使用这种分治方法关注形状曲面,则只需要O(2^(n*2/3))个样本,24位大约为65000个


此外,您对初始边界框大小的担忧变得无关紧要,因为在初始递归步骤中,多余的边界框会很快被移除。

如果您想坚持蒙特卡罗,这里有另一个想法:

在XZ平面上投影椭球体以获得2个椭圆。计算其边界矩形的交点,以用作计算的边界矩形

然后沿Y轴沿边界矩形内的XZ平面发射光线。对于每条光线,计算与椭球体的交点,并计算两条光线内部的光线长度。将其添加到变量“hits_length”

椭球体交点的体积应近似为:

点击\u长度/射线\u快照*边界\u矩形\u区域


同样,通过这种方式,您可以通过采样2D空间来计算体积,这将加快收敛速度。

由于rep的原因,我无法对jjrv的帖子发表评论,因此我将对我的帖子发表评论。不幸的是,他的答案是错误的。检查下面的图像:现在,考虑稍微扩大中心球体。外部形状的边将被破坏,但角不会被破坏。这也适用于立方体,我只是找不到oneLawton的图片,你能详细说明一下吗?一旦立方体的一些角在内部,一些角在外部,你再细分,它会失败吗?@jjrv立方体的所有角都可以在球体外部,但球体可以有部分在立方体外部。你的建议假设那是不可能的,但事实并非如此。立方体内部的立方体不可能在同一位置对齐,这就是为什么八叉树是有用的。但是,如果旋转立方体或使用球体、椭圆或诸如此类的东西,则该假设不起作用。此图像是一个更好的解释:如您所见,如果仅检查角,圆似乎位于正方形内部。然而,这是不正确的,而且圆实际上并不完全在正方形内部。那么一个不在正方形中心的椭圆呢,它很薄但很高?很抱歉,我不能给出更好的描述,但我认为这仍然会失败。这是一个很好的方法。不过,我认为它在更高的维度上无法很好地扩展。(我很确定你知道这一点;我只是想让原版海报更加清晰。)