如何使用Python';s噪声1.1.1用于坐标?

如何使用Python';s噪声1.1.1用于坐标?,python,perlin-noise,Python,Perlin Noise,我环顾四周,它似乎最常用于纹理,我发现自己一直在试图找出如何将Perlin/Simplex噪波实现为一组二维坐标x和y 我要做的就是输入2个随机坐标,x&y,然后它返回一个改变的x&y,或者这是不可能的 我使用pythons来创建坐标,但我发现perlin noise理解起来非常复杂,无法完全理解其工作原理。可以使用perlin noise为2D坐标集合添加一些不确定性(如果集合是一对,也可以)。您可以考虑返回的噪声值(在指向库的[-1, 1 ]范围内)以及一些因素来确定它对输入坐标有多大影响。

我环顾四周,它似乎最常用于纹理,我发现自己一直在试图找出如何将Perlin/Simplex噪波实现为一组二维坐标x和y

我要做的就是输入2个随机坐标,x&y,然后它返回一个改变的x&y,或者这是不可能的


我使用pythons来创建坐标,但我发现perlin noise理解起来非常复杂,无法完全理解其工作原理。

可以使用perlin noise为2D坐标集合添加一些不确定性(如果集合是一对,也可以)。您可以考虑返回的噪声值(在指向库的[-1, 1 ]范围内)以及一些因素来确定它对输入坐标有多大影响。系数越大,噪声对数据的影响就越大。以下是最简单的示例之一:

from noise import snoise2 # Simplex noise for 2D points

x, y = 0.5, 0.3
factor = 0.1
n = snoise2(x, y)
print x + n * factor, y + n * factor
我们也可以考虑一个更大的因素,并将同样的想法应用到图像中。考虑到
factor=15
并将结果坐标四舍五入到最近邻,我们从左侧的图像转到右侧的图像:

下面是获取图像的完整代码。使用因子
n1
n2
获得“不那么无聊”的图像

当然,这甚至还没有说明柏林噪声是如何被使用的。另一个例子是,给定一个特定的函数,您可以将输入“去噪”,并与提到的因子组合以创建不同的输出。例如,在基于余弦的函数上执行此操作的结果如下:


如果你只想给两个数字(x和y)加上一些噪声,你不需要柏林噪声-只需要使用高斯函数,这是真的,但柏林噪声很酷:)高斯有点可行,但它遗漏了我需要的东西,那就是如果我知道置换器,坐标可以被复制。
import sys
from noise import snoise2
from PIL import Image

img = Image.open(sys.argv[1]).convert('L')
result = Image.new('L', img.size)
width, height = img.size

factor = 15
res = result.load()
im = img.load()
for x in xrange(width):
    for y in xrange(height):
        n1 = snoise2(x, y)
        n2 = snoise2(y, x)
        pt = [int(round(x + n1 * factor)), int(round(y + n2 * factor))]
        pt[0] = min(max(0, pt[0]), width - 1)
        pt[1] = min(max(0, pt[1]), height - 1)
        res[x, y] = im[tuple(pt)]
result.save(sys.argv[2])