Я использую массив numpy для хранения значений Perlin Noise.Мне сказали, что значения Perlin Noise в 2D-массиве находятся в диапазоне [-0,7, 0,7] соответственно, но это не так.По крайней мере, не для библиотеки " noise " Каземана, когда я настраиваю параметры для октав, постоянства и лакунарности.
Я бы использовал другую библиотеку, за исключением того, что не могу найти ни одной для python, которая будет работать где-то так быстро.Кроме того, типичная формула для нормализации значения в диапазоне [0, 1], похоже, не работает здесь независимо.Даже если я получу минимальное / максимальное значения неизмененного шума, он все равно не даст мне желаемый диапазон значений.Я просто должен угадать, что использовать для значений min / max, пока диапазон не станет примерно [0, 1].
Как я могу нормализовать значения Perlin Noise в диапазоне [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("")