Python 柏林噪声标度

Python 柏林噪声标度,python,math,noise,perlin-noise,Python,Math,Noise,Perlin Noise,我正在用Python开发这个2D游戏,我希望有一个无限的随机生成的地图,但是一个可以使用种子重新生成的地图。 首先,我希望能够在不渲染其他内容的情况下渲染地图的任何部分,因此,如果我想找到坐标50100的平铺类型编号,我应该能够做到这一点,而不必计算任何其他平铺。我尝试使用不同的噪波函数来生成贴图,但我无法在任何实现中缩放峰谷之间的距离。其结果是景观中有太多太小的草地和泥土等 看看下面的简单实现,您将如何扩展它?我不是数学家,我自己根本就搞不懂 def noise(x, y, max):

我正在用Python开发这个2D游戏,我希望有一个无限的随机生成的地图,但是一个可以使用种子重新生成的地图。 首先,我希望能够在不渲染其他内容的情况下渲染地图的任何部分,因此,如果我想找到坐标50100的平铺类型编号,我应该能够做到这一点,而不必计算任何其他平铺。我尝试使用不同的噪波函数来生成贴图,但我无法在任何实现中缩放峰谷之间的距离。其结果是景观中有太多太小的草地和泥土等

看看下面的简单实现,您将如何扩展它?我不是数学家,我自己根本就搞不懂

def noise(x, y, max):
    n=x*331+y*337
    n=(n<<13)^n
    nn=(n*(n*n*41333 +53307781)+1376312589)&0x7fffffff
    return ((1.0-(nn/1073741824.0))+1)/2.0 * max

从描述来看,这听起来像是你们需要生成一个无限网格来存储所有的单位向量梯度,以便做你们想做的事情——这显然是不可能的,因为它需要无限的内存。除此之外,在纯Python中实现确定样本值所涉及的所有计算听起来并不是一件实际的事情。使用上面的函数,我可以随时为屏幕上的内容生成分幅,但仅限于40*80=3200分幅。我不存储它们,当用户不查看时,它们也不存在。它工作得很好,地图似乎永远在继续。我的问题是函数中峰谷之间的距离,使得地图看起来有点狭窄。我说的是一些产生柏林噪声的东西-我认为你在函数中没有这样做。为了缩放你所拥有的,似乎你可以将x&y值四舍五入到网格上最近的四个点,然后对实际点的值进行双线性插值,该点位于网格上实际四个点的边界内。也许我理解错了,但这不是游戏的工作原理。首先,我不能保证它是一个柏林噪声函数,但从输出来看,它显然是一个噪声函数。我使用一个32px*32px分片的网格,我希望每个分片的类型由一个函数确定。看看这个例子:据我所知,最终生成的柏林噪声的粒度较少地取决于所使用的随机数生成器,而更多地取决于八度音阶的权重;为了使输出更柔和,可以降低高八度音阶的重量,增加低八度音阶的重量。