我正尝试使用Python的noise模块中的生成2D Perlin noise。我试图按照examples。
功能仅仅需要一个x
和y
输入:Python pnoise返回0:为什么呢?
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
得到频率。 注意:这已经让我困惑,因为八度,我认为应该是一个整数,因为它告诉连续噪声函数的数量(注意它也是一个整数1
,作为函数中的第三个值传入)。不管怎么说,在功能,从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'模块? – kindall
使用我用pip安装的http://pypi.python.org/pypi/noise/。 – Benjamin
请参阅http://stackoverflow.com/questions/4467638/generating-3d-noise-quickly-in-python以供参考。 – Benjamin