# График шума Перлина с Matplotlibиз pylab импорт * импорт случайныйXDIM , YDIM = 11 , 11 # размер сетки градиента SCALE = 50 # размер сетки шума на единицу размера сетки градиента XDP , YDP = ( XDIM - 2 ) * SCALE + 1 , ( YDIM - 2 ) * SCALE + 1phi = нули (( YDIM , XDIM )) # углы фазы градиента perlin = нули (( YDP , XDP )) # Массив шума Перлина# сделать график воспроизводимым, используя фиксированное случайное начальное число random . seed ( "Perlin" )# выбрать случайные фазовые углы для градиентов для y в диапазоне ( YDIM ): для x в диапазоне ( XDIM ): phi [ y , x ] = 2 * pi * random . random ()def grad ( x0 , y0 , dx , dy ): "Вычислить скалярное произведение между градиентом и вектором положения" gx , gy = cos ( phi [ y0 , x0 ]), sin ( phi [ y0 , x0 ]) return gx * dx + gy * dydef inter ( a , b , w ): "Интерполировать между a и b, используя вес w" return ( b - a ) * (( w * ( w * 6 - 15 ) + 10 ) * w * w * w ) + a # более плавный шаг #return (b - a) * (3 - 2 * w) * w * w + a # плавный шаг #return (b - a) * w + a # линейный# вычисление шума Перлина для yi в диапазоне ( YDP ): для xi в диапазоне ( XDP ): x , y = xi / SCALE , yi / SCALE x0 , y0 = int ( x ), int ( y ) dx , dy = x - х0 , у - у0 g1 = град ( x0 , y0 , dx , dy ) g2 = град ( x0 + 1 , y0 , - 1 + dx , dy ) g3 = град ( x0 , y0 + 1 , dx , - 1 + dy ) g4 = град ( x0 + 1 , y0 + 1 , - 1 + dx , - 1 + dy ) perlin [ yi , xi ] = inter ( inter ( g1 , g2 , dx ), inter ( g3 , g4 , dx ), dy )print ( f "Макс { perlin . max () } , мин { perlin . min () } " )# используем Matplotlib для создания графика ( figsize = ( 8 , 9 ) ) X = array ( [ x / SCALE for x in range ( XDP )]) Y = array ( [ y / SCALE for y in range ( YDP )]) imshow ( perlin , interpolation = "bicubic" , cmap = plt . cm . bwr , vmin = - .8 , vmax = .8 , extend = ( X . min (), X . max (), Y . max (), Y . min ())) cb = colorbar ( orientation = "horizontal" ) contour ( X , Y , perlin , ( 0 ,), linewidths = 2 , colors = "green" ) xticks ( range ( XDIM - 1 ), labels = "" * XDIM ) yticks ( range ( YDIM - 1 ), labels = "" * YDIM ) grid ( lw = 1.2 , color = "black" , alpha = .8 , ls = "dashed" ) gca () . set_position ([ .1 , .2 , .8 , .8 ]) cb . ax . set_position ([ .1 , - .68 , .8 , .8 ]) title ( "2-D шум Перлина с контурной линией в нуле" )сохранитьfig ( "perlin_noise_with_contour.svg" ) показать ()