【发布时间】:2012-09-25 22:13:14
【问题描述】:
我正在尝试使用 Python 的 noise 模块中的 pnoise2() 生成 2D Perlin noise。我已尝试关注examples。
该函数只需要x 和y 输入:
noise2(x, y, octaves=1, persistence=0.5, repeatx=1024, repeaty=1024, base=0.0)
然而无论我传入什么,该函数总是返回0.0。怎么会?我错过了什么吗?
[编辑:05/10/12]
部分other example有效,代码很简单:
import sys
from noise import pnoise2
import random
random.seed()
octaves = random.random()
freq = 16.0 * octaves
for y in range(30):
for x in range(40):
n = int(pnoise2(x/freq, y / freq, 1)*10+3)
if n>=1:
n=1
else:
n=0
print n,
print
所以,由于我不知道 * 0.5 或 + 0.5 或 * 10+3 等值的用途,我尝试了自己,同时排除了其中一些值。在上面的示例中,random.random() 返回一个浮点数,例如0.7806 等然后乘以 16.0 得到频率。 NB:这已经让我感到困惑,因为八度音阶,我认为应该是一个整数,因为它告诉了连续噪声函数的数量(还要注意它是一个整数 1,它作为 pnoise2() 中的第三个值传入函数)。 无论如何,在函数中,来自range() 的一些整数然后除以frequency,现在大约是13.88:
>>> pnoise2(1/13.88, 1/13.88, 1)
0.06868855153353493
>>> pnoise2(0.07, 0.06, 1)
0.06691436186932441
>>> pnoise2(3.07, 3.04, 1)
0.06642476158741428
>>> pnoise2(3.00, 2.03, 1)
0.02999223154495647
话又说回来:
>>> pnoise2(3.0, 2.0, 1)
0.0
>>> pnoise2(1.0, 2.0, 1)
0.0
>>> pnoise2(4.0, 5.0, 1)
0.0
所以我得出结论,x 或 y 必须有小数才能使函数返回0.0 以外的值。
在这之后,我的问题是我不明白为什么。有人可以请教我吗?
【问题讨论】:
-
Python 没有
noise模块。你在用什么noise模块? -
使用我用 pip 安装的pypi.python.org/pypi/noise。
-
你传递的 x 和 y 是什么(举个例子?)你试过 x 和 y 作为 0.0 到 1.0 之间的浮点数吗?
标签: python floating-point perlin-noise