代码之家  ›  专栏  ›  技术社区  ›  avp

单位球面上的均匀随机(蒙特卡罗)分布

  •  8
  • avp  · 技术社区  · 16 年前


    我从一个点发射光线。这些光线的分布有个问题:我需要均匀的分布,但它不是。。。

    我现在面临的问题是,在我扭曲了结果空间之后,最初是均匀的分布并不均匀。

    例如,我在极坐标系下生成r和t角。分布是不均匀的,也不可能是均匀的:靠近每个极点的空间比靠近赤道的空间有更多密度的结果。原因很清楚:我将均匀分布的点从圆柱形空间转换为球形空间。我扭曲了结果。同样的问题是,如果我规范化立方体中随机生成的点。

    我现在的想法是:我想创建一个四面体,规范它的顶点,用中间的点分割每个面(三角形),规范它,并递归地重复,直到我有足够的点。然后我稍微“扭曲”了这些点。然后我再次使它们正常化。就这样。

    我知道这个方法本身并不是纯数学的蒙特卡罗方法,因为除了最后一步,我在任何一步都不使用随机分布。我不喜欢这种复杂的解决方案。

    • 随机的
    • 制服
    • 简单的

    编辑:
    我需要一个快速的方法,而不仅仅是正确的方法。这就是为什么我要问有关蒙特卡洛的问题。提供的答案是正确的,但不是很快。四面体法速度快,但不太“随机”=>不对。

    6 回复  |  直到 16 年前
        1
  •  10
  •   David Norman    16 年前

    Here's 允许您在单位球体上随机生成点的算法。

        2
  •  5
  •   finnw    15 年前

    下面是我过去使用过的一个Java实现:

    public static double[] randomPointOnSphere(Random rnd)
    {
        double x, y, z, d2;
        do {
            x = rnd.nextGaussian();
            y = rnd.nextGaussian();
            z = rnd.nextGaussian();
            d2 = x*x + y*y + z*z;
        } while (d2 <= Double.MIN_NORMAL);
        double s = Math.sqrt(1.0 / d2);
        return new double[] {x*s, y*s, z*s};
    }
    
        3
  •  4
  •   Bo Persson Touseef    14 年前

    然后我建议ZCW角,它均匀分布在整个球体上,计算速度很快。 排斥法很好,但速度很慢:它在球体上迭代均匀地分布点。幸运的是,这只需要做一次。

    这在结晶学和核磁共振中使用,因为对于粉末模式,使用均匀分布比使用随机分布更快(需要的点数更少)。

    Here 是ZCW的Python实现。

    有关详情,请参阅以下文件:

        4
  •  2
  •   dmckee --- ex-moderator kitten    16 年前

    phi (极角)和 cos(theta)

    在伪代码中:

    phi = phi_low_limit        + rand()*(phi_high_limit       - phi_low_limit)
    ct = cos(theta_high_limit) + rand()*(cos(theta_low_limit) - cos(theta_high_limit))
    // The order is inverted here because cos heads down for increasing theta
    theta = arccos(ct)
    

    这是规则的一个特例,该规则表示反转 Jacobian 那些 协调。

    另外请注意:这实际上不是最快的方法,而是一种说明一般原理的方法。

        5
  •  2
  •   Andrew Butts    16 年前

    除非只对琐碎的场景进行光线跟踪,否则渲染时间真的会由采样时间控制吗?如果没有,它可能还不值得优化,尽管它值得阅读和理解其他答案中给出的统一采样技术。

    此外,您的样本不需要非常随机,就可以很好地估计所采样的函数。您可能希望使用拟随机数序列(如 Halton sequence

    无论如何,你真的应该咨询ompf.org上的论坛。那里有一些超级强悍的光线追踪高手。

    推荐文章