Sortie "Dessiner fougère par programmation" dans le processus de dessin en Python

Aperçu

** La partie dessin utilise le code de @ noc06140728. ** ** http://qiita.com/noc06140728/items/8b8f06cfc312b8492df4

Je voulais voir le processus de dessin, alors je l'ai fait. Veuillez l'utiliser comme référence pour créer des applications avec PySide.

code

Version GUI

** * Le dessin est démarré avec mousePressEvent ** ** * Non supposé si le dessin est recommencé pendant le dessin **

fern_gui.py


import sys
import random
from PySide.QtGui import QApplication
from PySide.QtGui import QMainWindow
from PySide.QtGui import QLabel
from PySide.QtGui import QPixmap
from PySide.QtGui import QPainter
from PySide.QtGui import QColor

# Quot Begin
# From http://qiita.com/noc06140728/items/8b8f06cfc312b8492df4
N = 20
xm = 0
ym = 0.5
h = 0.6

width = 500
height = 500

W1x = lambda x, y: 0.836 * x + 0.044 * y
W1y = lambda x, y: -0.044 * x + 0.836 * y + 0.169
W2x = lambda x, y: -0.141 * x + 0.302 * y
W2y = lambda x, y: 0.302 * x + 0.141 * y + 0.127
W3x = lambda x, y: 0.141 * x - 0.302 * y
W3y = lambda x, y: 0.302 * x + 0.141 * y + 0.169
W4x = lambda x, y: 0
W4y = lambda x, y: 0.175337 * y

def f(k, x, y):
    if 0 < k:
        for p in f(k - 1, W1x(x, y), W1y(x, y)):
            yield p
        if random.random() < 0.3:
            for p in f(k - 1, W2x(x, y), W2y(x, y)):
                yield p
        if random.random() < 0.3:
            for p in f(k - 1, W3x(x, y), W3y(x, y)):
                yield p
        if random.random() < 0.3:
            for p in f(k - 1, W4x(x, y), W4y(x, y)):
                yield p
    else:
        s = 490
        yield x * s + width * 0.5, height - y * s
# Quot End


class MainWindow(QMainWindow):
    def __init__(self, parent = None):
        super().__init__(parent)
        self.setFixedSize(width, height)
        self.refresh_rate = 200
        self.pixmap = QPixmap(width, height)
        self.pixmap.fill()

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawPixmap(0, 0, self.pixmap)

    def mousePressEvent(self, event):
        painter = QPainter(self.pixmap)
        painter.setPen(QColor(0, 128, 0))
        for i, p in enumerate(f(N, 0, 0)):
            painter.drawPoint(p[0], p[1])
            if i % self.refresh_rate == 0:
                self.repaint()
        self.repaint()
        painter.end()
        print("finished")

def main():
    app = QApplication(sys.argv)

    window = MainWindow()
    app.setActiveWindow(window)
    window.show()

    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

Version CUI (sortie du numéro de série PNG)

fern_cui.py


import sys
import random
from PySide.QtCore import QDir
from PySide.QtGui import QDesktopServices
from PySide.QtGui import QApplication
from PySide.QtGui import QPixmap
from PySide.QtGui import QPainter
from PySide.QtGui import QColor

# Quot Begin
# From http://qiita.com/noc06140728/items/8b8f06cfc312b8492df4
N = 20
xm = 0
ym = 0.5
h = 0.6

width = 500
height = 500

W1x = lambda x, y: 0.836 * x + 0.044 * y
W1y = lambda x, y: -0.044 * x + 0.836 * y + 0.169
W2x = lambda x, y: -0.141 * x + 0.302 * y
W2y = lambda x, y: 0.302 * x + 0.141 * y + 0.127
W3x = lambda x, y: 0.141 * x - 0.302 * y
W3y = lambda x, y: 0.302 * x + 0.141 * y + 0.169
W4x = lambda x, y: 0
W4y = lambda x, y: 0.175337 * y

def f(k, x, y):
    if 0 < k:
        for p in f(k - 1, W1x(x, y), W1y(x, y)):
            yield p
        if random.random() < 0.3:
            for p in f(k - 1, W2x(x, y), W2y(x, y)):
                yield p
        if random.random() < 0.3:
            for p in f(k - 1, W3x(x, y), W3y(x, y)):
                yield p
        if random.random() < 0.3:
            for p in f(k - 1, W4x(x, y), W4y(x, y)):
                yield p
    else:
        s = 490
        yield x * s + width * 0.5, height - y * s
# Quot End

def main():
    app = QApplication(sys.argv)

    # Output Directory
    # <Desktop>/ferns/
    directory = QDir(QDesktopServices.storageLocation(QDesktopServices.DesktopLocation))
    directory.mkdir("ferns")
    if directory.cd("ferns") == False:
        print("directory error")
        app.quit()
        return

    # Output
    # <Desktop>/ferns/fern_*****.png
    output_rate = 2000
    pixmap = QPixmap(width, height)
    pixmap.fill()
    painter = QPainter(pixmap)
    painter.setPen(QColor(0, 128, 0))
    for i, p in enumerate(f(N, 0, 0)):
        painter.drawPoint(p[0], p[1])
        if i % output_rate == 0:
            pixmap.save("%s/fern_%05d.png " % (directory.path(), i / output_rate))
    pixmap.save("%s/fern_%05d.png " % (directory.path(), i / output_rate + 1))
    painter.end()

    print("finished")
    app.quit()


if __name__ == '__main__':
    main()

Exemple de sortie (animation GIF)

animated.gif

Recommended Posts

Sortie "Dessiner fougère par programmation" dans le processus de dessin en Python
Dessiner "Dessiner une fougère par programme" en Python
Dessinez des graphiques dans Julia ... Laissez les graphiques à Python
[Python] Comment afficher les valeurs de liste dans l'ordre
Changer la destination de sortie standard en un fichier en Python
Dans la commande python, python pointe vers python3.8
Exportez le contenu de ~ .xlsx dans le dossier en HTML avec Python
Comment utiliser la bibliothèque C en Python
Sortie du nombre de cœurs de processeur en Python
3.14 π jour, alors essayez de sortir en Python
Du dessin de fichier au graphique en Python. Élémentaire élémentaire
Dessiner "Dessiner une fougère par programmation" en Python - Aucune récurrence + Version du générateur -
Pour remplacer dynamiquement la méthode suivante en python
Conseils pour rédiger un aplatissement concis en python
Comment effacer les caractères générés par Python
Comment obtenir les fichiers dans le dossier [Python]
Sortie sous la forme d'un tableau python
[Python] Comment dessiner un histogramme avec Matplotlib
Comment générer "Ketsumaimo" en standard en Python
Je veux afficher la progression en Python!
Utilisez libsixel pour générer Sixel en Python et générer le graphe Matplotlib vers le terminal.
Dessin graphique avec python
Sortie japonaise avec Python
Dessiner un graphique avec python
Comment récupérer la nième plus grande valeur en Python
J'ai essayé de représenter graphiquement les packages installés en Python
Comment obtenir le nom de la variable lui-même en python
Comment obtenir le nombre de chiffres en Python
Comment connaître le répertoire actuel en Python dans Blender
Affiche l'heure à partir du moment où le programme a été lancé en python
[python] option pour désactiver la sortie de click.progressbar
Comprenez attentivement la distribution exponentielle et dessinez en Python
Convertissez l'image au format .zip en PDF avec Python
Comprendre attentivement la distribution de Poisson et dessiner en Python
Je veux écrire en Python! (3) Utiliser des simulacres
Comment utiliser le modèle appris dans Lobe en Python
Pour faire l'équivalent de Ruby ObjectSpace._id2ref en Python
Je veux utiliser le jeu de données R avec python
Python Open CV a essayé d'afficher l'image sous forme de texte.
Utilisez tkinter pour déplacer le code de sortie en tant que "A et prétendant être B" en python
Sortie de la table spécifiée de la base de données Oracle en Python vers Excel pour chaque fichier
[Mac] Un moyen très simple d'exécuter des commandes système en Python et de générer les résultats
Il est facile d'exécuter SQL avec Python et de générer le résultat dans Excel
[C / C ++] Passez la valeur calculée en C / C ++ à une fonction python pour exécuter le processus et utilisez cette valeur en C / C ++.
[python] Comment vérifier si la clé existe dans le dictionnaire
Dessin de bougie avec python
Pour vider stdout en Python
Dessiner une forme d'onde mp3 en Python
Comment déboguer une bibliothèque Python standard dans Visual Studio
[python] Comment utiliser Matplotlib, une bibliothèque pour dessiner des graphiques
Trouver des erreurs en Python
Comment utiliser la méthode __call__ dans la classe Python
Connectez-vous au site Web en Python
Dessinez le disque de Poancare en Python
En Python, les éléments de la liste sont triés et sortis sous forme d'éléments et de multiples.
Différentes façons de calculer la similitude entre les données avec python
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Dessiner la fonction Yin en python
Attacher au processus Python de la destination SSH et déboguer
Parler avec Python [synthèse vocale]