[Python] J'ai écrit de force une courte fonction de génération de bruit parlin dans Numpy.

introduction

** ・ Qu'est-ce que le bruit pearlin ** Le bruit Parlin est un bruit facile à utiliser (tel que la génération de terrain aléatoire) avec une continuité et un désordre raisonnables. D'autres ont écrit les détails, donc je vais simplement présenter le code ici.

La fonction que j'ai écrite

perlin.py


#Importer la bibliothèque
import numpy as np
import matplotlib.pyplot as plt

#Enfants qui produisent une interpolation linéaire et une continuité
def fade(t):return 6*t**5-15*t**4+10*t**3
def lerp(a,b,t):return a+fade(t)*(b-a)

#Corps
def perlin(r,seed=np.random.randint(0,100)):
    np.random.seed(seed)

    ri = np.floor(r).astype(int) #Partie entière, utilisée comme index
    ri[0] -= ri[0].min()         #
    ri[1] -= ri[1].min()         #Prêt à utiliser comme index
    rf = np.array(r) % 1         #Partie décimale
    g = 2 * np.random.rand(ri[0].max()+2,ri[1].max()+2,2) - 1 #Gradient de points de grille
    e = np.array([[[[0,0],[0,1],[1,0],[1,1]]]])                       #quatre coins
    er = (np.array([rf]).transpose(2,3,0,1) - e).reshape(r.shape[1],r.shape[2],4,1,2) #Vecteur de position vu de chaque point des quatre coins
    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) #Transformé en une forme permettant de calculer le produit intérieur en collectant les dégradés des quatre coins avec le tri fantaisie familier
    p = (er@gr).reshape(r.shape[1],r.shape[2],4).transpose(2,0,1) #Calcul interne du produit avec gradient pour tous les points
    
    return lerp(lerp(p[0],p[2],rf[0]),lerp(p[1],p[3],rf[0]),rf[1]) #Interpoler et revenir

Calcul / tracé

perlin.py


N = 512
y = np.zeros((N,N))
for i in np.random.rand(1):         #Le bruit Parlin semble montrer son vrai potentiel lorsque vous changez la fréquence et empilez plusieurs feuilles, alors bouclez et ajoutez (s'il vous plaît autant que vous le souhaitez)
    x = np.linspace(0,8*i,N)
    r = np.array(np.meshgrid(x,x))
    y += perlin(r)                  #forme de meshgrid(2,N,N)Passer à côté

plt.imshow(y)
plt.show()

Résultat: perlin.png

Autre tracé 3D et version de dimension étendue

Résumé

Ce code est écrit parce que je ne veux pas utiliser de boucles. En chemin, un tenseur à 5 dimensions sort, mais ça fait du bien de pouvoir écrire clairement.

Recommended Posts

[Python] J'ai écrit de force une courte fonction de génération de bruit parlin dans Numpy.
J'ai écrit une fonction pour charger le script d'extension Git en Python
Un mémo que j'ai écrit un tri rapide en Python
J'ai écrit une classe en Python3 et Java
Créer une fonction en Python
J'ai écrit Fizz Buzz en Python
J'ai écrit la file d'attente en Python
J'ai écrit la pile en Python
J'ai écrit un script pour extraire les liens de pages Web en Python
J'ai fait un programme de gestion de la paie en Python!
Précautions lors du décapage d'une fonction en python
Ecrire une courte définition de propriété en Python
J'ai créé un outil de mot de passe en Python.
J'ai écrit un code pour convertir quaternion en angle de graissage de type z-y-x avec Python
J'ai écrit FizzBuzz en python en utilisant la machine à vecteurs de support (bibliothèque LIVSVM).
J'ai écrit un graphe comme R glmnet en Python pour une modélisation clairsemée avec Lasso
[Examen d'ingénieur d'information de base] J'ai écrit un algorithme de recherche linéaire en Python.
Récupérer l'appelant d'une fonction en Python
Je veux créer une fenêtre avec Python
J'ai essayé de jouer à un jeu de frappe avec Python
J'ai écrit "Introduction à la vérification des effets" en Python
J'ai écrit un modèle de conception dans l'édition Kotlin Prototype
J'ai essayé d'implémenter la fonction gamma inverse en python
J'ai essayé d'ajouter un module Python 3 en C
J'ai écrit un analyseur japonais en japonais en utilisant pyparsing.
J'ai créé un programme cryptographique César en Python.
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
J'ai écrit un modèle de conception dans l'édition Kotlin Factory
J'ai écrit un modèle de conception dans l'édition Kotlin Builder
Je veux écrire en Python! (2) Écrivons un test
J'ai écrit un modèle de conception dans l'édition Kotlin Singleton
J'ai écrit un modèle de conception dans l'édition Kotlin Adapter
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai écrit un modèle de conception en kotlin, édité par Iterator
Je veux échantillonner au hasard un fichier avec Python
Je veux travailler avec un robot en python.
J'ai écrit un modèle de conception dans l'édition de modèle kotlin
J'ai implémenté une commande de remplacement de type Vim dans Slackbot #Python
Que signifie le dernier () dans une fonction en Python?
J'ai écrit python3.4 dans .envrc avec direnv et je l'ai autorisé, mais j'ai eu une erreur de syntaxe
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
J'ai fait un jeu de frappe simple avec tkinter de Python
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
Une fonction qui divise l'itérable en N morceaux en Python
J'ai écrit rapidement un programme pour étudier la DI avec Python ①
[Python] Je souhaite obtenir un ensemble commun entre numpy
J'ai créé un lecteur de flux rapide en utilisant feedparser en Python
J'ai essayé "un programme qui supprime les déclarations en double en Python"
J'ai essayé "Comment obtenir une méthode décorée en Python"
J'ai écrit un script de création automatique de répertoire vide en Python
Pour renvoyer char * dans une fonction de rappel à l'aide de ctypes en Python
[python] Gérer les fonctions en les mettant dans un dictionnaire (table de commande, table de fonction, pointeur de fonction)
J'ai créé une classe en Python et essayé de taper du canard