Я пытаюсь сгенерировать 2D шум Perlin, используя pnoise2()
из Python's < модуль href="http://pypi.python.org/pypi/noise/" rel="nofollow noreferrer">noise. Я пытался следовать примерам.
Функция просто требует ввода x
и y
:
noise2(x, y, octaves=1, persistence=0.5, repeatx=1024, repeaty=1024, base=0.0)
Тем не менее, независимо от того, что я передаю, функция всегда возвращает 0.0
. Почему? Я что-то пропустил?
[править: 10.05.12]
Некоторые другие примеры работают , код простой:
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
, которое передается в качестве третьего значения в функцию pnoise2()
).< /em> В любом случае, в функции некоторые целые числа из 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
.
Теперь, после этого, моя проблема в том, что я не понимаю, почему. Может кто-нибудь просветить меня, пожалуйста?
noise
. Какой модульnoise
вы используете? - person kindall   schedule 05.10.2012