[Python] Ich habe gewaltsam eine kurze Funktion zur Erzeugung von Parlin-Geräuschen in Numpy geschrieben.

Einführung

** ・ 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.

Die Funktion, die ich geschrieben habe

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

Berechnung / Handlung

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: perlin.png

Andere 3D-Plot- und erweiterte Bemaßungsversion

Zusammenfassung

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

[Python] Ich habe gewaltsam eine kurze Funktion zur Erzeugung von Parlin-Geräuschen in Numpy geschrieben.
Ich habe eine Funktion zum Laden des Git-Erweiterungsskripts in Python geschrieben
Ein Memo, das ich schnell in Python geschrieben habe
Ich habe eine Klasse in Python3 und Java geschrieben
Erstellen Sie eine Funktion in Python
Ich habe Fizz Buzz in Python geschrieben
Ich habe die Warteschlange in Python geschrieben
Ich habe den Stack in Python geschrieben
Ich habe ein Skript geschrieben, um Webseiten-Links in Python zu extrahieren
Ich habe ein Pay-Management-Programm in Python erstellt!
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
Schreiben Sie eine kurze Eigenschaftsdefinition in Python
Ich habe ein Passwort-Tool in Python erstellt.
Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln
Ich habe FizzBuzz in Python mit der Support Vector Machine (Bibliothek LIVSVM) geschrieben.
Ich habe ein Diagramm wie R glmnet in Python für die spärliche Modellierung mit Lasso geschrieben
[Basic Information Engineer Examination] Ich habe einen linearen Suchalgorithmus in Python geschrieben.
Holen Sie sich den Aufrufer einer Funktion in Python
Ich möchte mit Python ein Fenster erstellen
Ich habe versucht, mit Python ein Tippspiel zu spielen
Geschrieben "Einführung in die Effektüberprüfung" in Python
Ich habe ein Designmuster in der Kotlin Prototype Edition geschrieben
Ich habe versucht, die inverse Gammafunktion in Python zu implementieren
Ich habe versucht, ein Python 3-Modul in C hinzuzufügen
Ich habe einen japanischen Parser auf Japanisch mit Pyparsing geschrieben.
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Ich habe ein Designmuster in der Kotlin Factory Edition geschrieben
Ich habe ein Designmuster in der Kotlin Builder Edition geschrieben
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich habe ein Designmuster in der Kotlin Singleton Edition geschrieben
Ich habe ein Designmuster in der Kotlin Adapter Edition geschrieben
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich habe ein Designmuster in Kotlin geschrieben, das von Iterator bearbeitet wurde
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit einem Roboter in Python arbeiten.
Ich habe ein Designmuster in der Kotlin Template Edition geschrieben
Ich habe einen Vim-ähnlichen Ersetzungsbefehl in Slackbot #Python implementiert
Was bedeutet das letzte () in einer Funktion in Python?
Ich habe python3.4 in .envrc mit direnv geschrieben und es zugelassen, aber ich habe einen Syntaxfehler erhalten
Ich habe auch versucht, die Funktionsmonade und die Zustandsmonade mit dem Generator in Python nachzuahmen
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Eine Funktion, die iterable in Python in N Teile unterteilt
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
[Python] Ich möchte einen gemeinsamen Satz zwischen numpy erhalten
Ich habe einen schnellen Feed-Reader mit Feedparser in Python erstellt
Ich habe versucht, "ein Programm, das doppelte Anweisungen in Python entfernt"
Ich habe versucht "Wie man eine Methode in Python dekoriert"
Ich habe ein Skript zur automatischen Erstellung eines leeren Verzeichnisses in Python geschrieben
So geben Sie char * in einer Rückruffunktion mit ctypes in Python zurück
[Python] Verwalten Sie Funktionen, indem Sie sie in ein Wörterbuch einfügen (Befehlstabelle, Funktionstabelle, Funktionszeiger).
Ich habe eine Klasse in Python erstellt und versucht, Enten zu tippen