Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1415:projekte_im_wintersemester_2014_15:perlin2d.py

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):
'''
ws1415/projekte_im_wintersemester_2014_15/perlin2d.py.txt · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)