【发布时间】:2010-09-12 21:37:05
【问题描述】:
我一直在为我的map generator 生成 Perlin 噪声。我遇到的问题是随机噪声不是正态分布的,更可能是各种正态分布。
给定两个整数 X 和 Y,以及一个种子值,我执行以下操作:
- 使用MurmurHash2 生成随机数(-1,1)。这是均匀分布的。
- 使用三次插值在整数值之间插入点。值现在落在范围 (-2.25, 2.25) 内,因为插值可以在相似值之间外推更高的点(每个维度增加 1.5),并且分布不再均匀。
- 生成这些插值点,将它们加在一起,同时将幅度减半(请参阅:Perling noise)随着和的数量接近无穷大,范围的限制现在接近先前值的两倍,或 (-4.5, 4.5) 和现在更不统一了。
当我想要 (-1, 1) 的范围时,这显然不起作用,因此我将所有最终值除以 4.5。实际上,我一直将它们除以(在对每个维度进行插值后除以 1.5,然后在对噪声求和后除以 2。)
除法后,我的理论范围为 (-1, 1)。但是,绝大多数值是 (-0.2,0.2)。这在生成我的地图时效果不佳,因为我需要确定地图填充的百分比。我也无法使用直方图来确定要使用的阈值,因为我是按需生成正方形,而不是整个地图。
我需要使我的分布在两点均匀 - 插值之后,以及噪声函数的总和之后。我不知道该怎么做。
我的分布如下所示:
我需要它看起来像这样:
(两张图片均来自维基百科。)
感谢任何解决方案,但我是用 C# 编写的,所以代码 sn-ps 将非常有帮助。
【问题讨论】:
-
抱歉,我没有完全理解您的问题:您希望有人帮助您调试您的算法,还是 Normal[mu,sigma] 随机数生成器?
-
不,我的算法工作正常,只是不是我想要的。而且我不想生成随机正态分布。我想采用我的算法,该算法生成随机正态分布(-4.5,4.5)并使其生成均匀分布(-1,1)。
-
您在第 1 步已经有了一个统一的 (-1,1) 分布...
-
@Keith - 是的,但我没有 Perlin 噪声函数。只是完全随机的噪声,在产生自然团块等方面是无用的(见第一个链接。)
-
所以您希望最终 Perlin 噪声形函数中的各个“点”具有随机分布而不是正态分布?并且在仍然拥有柏林形状的地图的同时做到这一点?
标签: algorithm language-agnostic statistics distribution