我正在尝试使用Python 的噪声模块生成 2D Perlin 噪声。我试图遵循示例。
该函数只需要一个和输入:pnoise2()
x
y
noise2(x, y, octaves=1, persistence=0.5, repeatx=1024, repeaty=1024, base=0.0)
然而,无论我传入什么,函数总是返回0.0
. 怎么来的?我错过了什么?
[编辑:2012 年 5 月 10 日]
其他一些示例有效,代码很简单:
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
or + 0.5
or * 10+3
etc. 值是什么,我尝试了自己,同时排除了其中一些值。在上面的示例中,random.random()
返回一个浮点数,例如0.7806
等,然后将其乘以16.0
得到频率。注意:这已经让我感到困惑,因为八度音阶,我认为应该是一个整数,因为它告诉了连续噪声函数的数量(还要注意它是一个整数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
or y
必须有小数才能使函数返回0.0
.
现在在这之后,我的问题是我不明白为什么。有人可以启发我吗?