作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 numpy 数组来保存柏林噪声值。有人告诉我,二维数组中的柏林噪声值分别在 [-0.7, 0.7] 范围内,但这似乎并非如此。至少当我调整 Octave 、持久性和空白度的参数时,凯斯曼的“noise”库不会。
我会使用不同的库,但我找不到任何运行速度接近的Python库。此外,无论如何,将值标准化为范围 [0, 1] 的典型公式在这里似乎不起作用。即使我得到未修改噪声的最小/最大值,它仍然没有给我我想要的值范围。我只需猜测最小/最大值使用什么,直到范围大致为 [0, 1]。
如何将柏林噪声值归一化至范围 [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和矢量化)应该就足够了。
关于python - 如何将 Perlin 噪声值标准化到范围 [0, 1]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55291509/
我是一名优秀的程序员,十分优秀!