** ・ Was ist Perlengeräusch ** Parlin-Geräusche sind einfach zu verwendende Geräusche (z. B. zufällige Geländegenerierung) mit angemessener Kontinuität und Unordnung. Andere haben die Details geschrieben, deshalb werde ich den Code hier nur vorstellen.
perlin.py
#Bibliothek importieren
import numpy as np
import matplotlib.pyplot as plt
#Kinder, die lineare Interpolation und Kontinuität erzeugen
def fade(t):return 6*t**5-15*t**4+10*t**3
def lerp(a,b,t):return a+fade(t)*(b-a)
#Körper
def perlin(r,seed=np.random.randint(0,100)):
np.random.seed(seed)
ri = np.floor(r).astype(int) #Ganzzahliger Teil, der als Index verwendet wird
ri[0] -= ri[0].min() #
ri[1] -= ri[1].min() #Bereit zur Verwendung als Index
rf = np.array(r) % 1 #Dezimalteil
g = 2 * np.random.rand(ri[0].max()+2,ri[1].max()+2,2) - 1 #Gradient der Gitterpunkte
e = np.array([[[[0,0],[0,1],[1,0],[1,1]]]]) #vier Ecken
er = (np.array([rf]).transpose(2,3,0,1) - e).reshape(r.shape[1],r.shape[2],4,1,2) #Positionsvektor von jedem Punkt der vier Ecken aus gesehen
gr = np.r_["3,4,0",g[ri[0],ri[1]],g[ri[0],ri[1]+1],g[ri[0]+1,ri[1]],g[ri[0]+1,ri[1]+1]].transpose(0,1,3,2).reshape(r.shape[1],r.shape[2],4,2,1) #Verarbeitet zu einer Form, die das innere Produkt berechnen kann, indem die Verläufe der vier Ecken mit der bekannten ausgefallenen Sorte gesammelt werden
p = (er@gr).reshape(r.shape[1],r.shape[2],4).transpose(2,0,1) #Interne Produktberechnung mit Gradient für alle Punkte
return lerp(lerp(p[0],p[2],rf[0]),lerp(p[1],p[3],rf[0]),rf[1]) #Interpolieren und zurückkehren
perlin.py
N = 512
y = np.zeros((N,N))
for i in np.random.rand(1): #Das Parlin-Rauschen scheint sein wahres Potenzial zu zeigen, wenn Sie die Frequenz ändern und mehrere Blätter stapeln.
x = np.linspace(0,8*i,N)
r = np.array(np.meshgrid(x,x))
y += perlin(r) #Form des Netzgitters(2,N,N)Vorbeigehen
plt.imshow(y)
plt.show()
Ergebnis:
Dieser Code wurde geschrieben, weil ich keine Schleifen verwenden möchte. Unterwegs kommt ein 5-dimensionaler Tensor heraus, aber es fühlt sich gut an, klar schreiben zu können.
Recommended Posts