我环顾四周,似乎大多数人都将其用于纹理,我发现自己被困在如何将Perlin/Simplex Noise实现到一组二维坐标x和y上。
我所要做的就是输入2个随机坐标,x& y,然后返回一个改变后的x&y,或者这是不可能的?
我使用pythons noise来创建坐标,但是我发现perlin噪声很难理解,并且无法完全理解它是如何工作的。
发布于 2013-02-20 03:33:09
可以使用Perlin噪声将一些不确定性添加到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被用来获得一个“不那么无聊”的图像。
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])当然,这并不是很难理解如何使用Perlin噪声。作为另一个例子,给定某个函数,您可以对输入进行“加噪”,并与前面提到的因子相结合来创建不同的输出。例如,这是对基于余弦的某些函数执行此操作的结果:

https://stackoverflow.com/questions/14965316
复制相似问题