首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python的Noise 1.1.1作为坐标?

如何使用Python的Noise 1.1.1作为坐标?
EN

Stack Overflow用户
提问于 2013-02-20 03:00:15
回答 1查看 656关注 0票数 2

我环顾四周,似乎大多数人都将其用于纹理,我发现自己被困在如何将Perlin/Simplex Noise实现到一组二维坐标x和y上。

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

我使用pythons noise来创建坐标,但是我发现perlin噪声很难理解,并且无法完全理解它是如何工作的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-20 03:33:09

可以使用Perlin噪声将一些不确定性添加到2D坐标的集合中(如果集合是单个对,也可以)。您可以考虑返回的噪声值(在指向的库的范围-1,1中)以及一些因子,以确定它对输入坐标的影响程度。该因子越大,噪声对数据的影响就越大。下面是一个最简单的例子:

代码语言:javascript
复制
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并将结果坐标舍入到最近的邻居,我们从左侧的图像转到右侧的图像:

因子n1n2被用来获得一个“不那么无聊”的图像。

代码语言:javascript
复制
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噪声。作为另一个例子,给定某个函数,您可以对输入进行“加噪”,并与前面提到的因子相结合来创建不同的输出。例如,这是对基于余弦的某些函数执行此操作的结果:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14965316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档