====== perlin2D.py ====== from __future__ import division import numpy import math import matplotlib.pyplot as plt g = [[(numpy.random.uniform(-1, 1), numpy.random.uniform(-1, 1)) for wer2 in range(0,1000)] for wert in range(0,1000)] def s_x(x_punkt): return 10*x_punkt**3 - 15*x_punkt**4 + 6*x_punkt**5 def noise(x, y): def interpolate(x_punkt, y_punkt, w_00, w_10, w_01, w_11): s_schlange_x = s_x(x_punkt) s_schlange_y = s_x(y_punkt) w_0 = (1-s_schlange_x)*w_00 + s_schlange_x*w_10 w_1 = (1-s_schlange_x)*w_01 + s_schlange_x*w_11 return (1 - s_schlange_y)*w_0 + s_schlange_y*w_1 p_x = int(math.floor(x)) p_y = int(math.floor(y)) x_punkt = x - p_x y_punkt = y - p_y g_00 = g[p_x][p_y] g_10 = g[p_x + 1][p_y] g_01 = g[p_x][p_y + 1] g_11 = g[p_x + 1][p_y + 1] w_00 = g_00[0]*x_punkt + g_00[1]*y_punkt w_10 = g_10[0]*(x_punkt - 1) + g_10[1]*y_punkt w_01 = g_01[0]*x_punkt + g_01[1]*(y_punkt - 1) w_11 = g_11[0]*(x_punkt - 1) + g_11[1]*(y_punkt - 1) w = interpolate(x_punkt, y_punkt, w_00, w_10, w_01, w_11) return w def Noise(x, y, f_min, f_max, Phi): summe = 0 n = 0 f = f_min a = 1 while f <= f_max: summe += a*noise(f*x, f*y) n += 1 f = f*2 a = Phi*a return summe heightmap = [[Noise(x, y, 0.03125, 0.5, 0.3) for y in range(5)] for x in range(5)] print heightmap ''' heightmap = [] for x in range(5): for y in range(5): '''