我使用一个numpy数组来保存柏林噪声值。我听说二维数组中的柏林噪声值分别在[-0.7,0.7]范围内,但这似乎不是真的。当我调整八度音程、持续性和空白度的参数时,至少不适用于Caseman的“noise”库。在
我会使用另一个库,但我找不到任何运行速度接近python的库。另外,将值规格化为范围[0,1]的典型公式在这里似乎不起作用。即使我得到了未修改的噪波的最小值/最大值,它仍然不能提供我想要的值范围。我只需要猜测最小值/最大值使用什么,直到范围大致为[0,1]。在
如何将Perlin噪波值规格化为范围[0,1]?在
import noise
import numpy
import sys
def __noise(noise_x, noise_y):
"""
Generates and returns a noise value normalized to (roughly) range [0, 1].
:param noise_x: The noise value of x
:param noise_y: The noise value of y
:return: float
"""
value = noise.pnoise2(noise_x, noise_y, 8, 1.7, 2)
# Normalize to range [0, 1]
value = numpy.float32((value + 0.6447) / (0.6697 + 0.6447))
return value
map_arr = numpy.zeros([900, 1600], numpy.float32)
for y in range(900):
for x in range(1600):
noise_x = x / 1600 - 0.5
noise_y = y / 900 - 0.5
value = __noise(noise_x, noise_y)
map_arr[y][x] = value
for row in map_arr:
for num in row:
sys.stdout.write(str(num) + " ")
print("")
map_arr = (map_arr - map_arr.min()) / (map_arr.max() - map_arr.min())
(利用numpy
broadcasting和矢量化)就足够了。在相关问题 更多 >
编程相关推荐