Geben Sie "Farn programmgesteuert zeichnen" in den Zeichenprozess in Python ein

Überblick

** Das Zeichnungsteil verwendet den Code @ noc06140728. ** ** ** http://qiita.com/noc06140728/items/8b8f06cfc312b8492df4

Ich wollte den Zeichenprozess sehen, also habe ich es geschafft. Bitte verwenden Sie es als Referenz zum Erstellen von Anwendungen mit PySide.

Code

GUI-Version

** * Das Zeichnen wird mit mousePressEvent gestartet ** ** * Wird nicht angenommen, wenn das Zeichnen während des Zeichnens erneut gestartet wird **

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()

CUI-Version (Ausgabe der PNG-Seriennummer)

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()

Ausgabebeispiel (GIF-Animation)

animated.gif

Recommended Posts

Geben Sie "Farn programmgesteuert zeichnen" in den Zeichenprozess in Python ein
Zeichnen Sie "Farn programmgesteuert zeichnen" in Python
Zeichnen Sie Diagramme in Julia ... Überlassen Sie die Diagramme Python
[Python] So geben Sie Listenwerte der Reihe nach aus
Ändern Sie das Standardausgabeziel in eine Datei in Python
Im Python-Befehl zeigt Python auf Python3.8
Geben Sie den Inhalt von ~ .xlsx im Ordner mit Python in HTML aus
Verwendung der C-Bibliothek in Python
Geben Sie die Anzahl der CPU-Kerne in Python aus
3,14 π Tag, versuchen Sie also, in Python auszugeben
Von der Datei zur Diagrammzeichnung in Python. Grundstufe Grundstufe
Zeichnen Sie "Farn programmgesteuert zeichnen" in Python - Keine Wiederholung + Generator-Version -
Dynamisches Ersetzen der nächsten Methode in Python
Tipps zum Schreiben werden in Python kurz abgeflacht
So löschen Sie die von Python ausgegebenen Zeichen
So erhalten Sie die Dateien im Ordner [Python]
Ausgabe in Form eines Python-Arrays
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
So geben Sie "Ketsumaimo" standardmäßig in Python aus
Ich möchte den Fortschritt in Python anzeigen!
Verwenden Sie libsixel, um Sixel in Python auszugeben und das Matplotlib-Diagramm an das Terminal auszugeben.
Diagrammzeichnung mit Python
Japanische Ausgabe mit Python
Zeichnen Sie ein Diagramm mit Python
So rufen Sie den n-ten größten Wert in Python ab
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
So erhalten Sie den Variablennamen selbst in Python
So ermitteln Sie die Anzahl der Stellen in Python
Wie Sie das aktuelle Verzeichnis in Python in Blender kennen
Geben Sie die Zeit ab dem Start des Programms in Python aus
Option [Python] zum Deaktivieren der Ausgabe von click.progressbar
Verstehen Sie die Exponentialverteilung sorgfältig und zeichnen Sie in Python
Konvertieren Sie das Bild in .zip mit Python in PDF
Verstehe die Poisson-Distribution sorgfältig und zeichne in Python
Ich möchte in Python schreiben! (3) Verwenden Sie Mock
Verwendung des in Lobe in Python erlernten Modells
Um das Äquivalent von Rubys ObjectSpace._id2ref in Python zu tun
Ich möchte R-Datensatz mit Python verwenden
Python Open CV hat versucht, das Bild im Text anzuzeigen.
Verwenden Sie tkinter, um den Ausgabecode in Python als "A und vorgeben, B zu sein" zu verschieben
Geben Sie für jede Datei die angegebene Tabelle der Oracle-Datenbank in Python in Excel aus
[Mac] Eine supereinfache Möglichkeit, Systembefehle in Python auszuführen und die Ergebnisse auszugeben
Es ist einfach, SQL mit Python auszuführen und das Ergebnis in Excel auszugeben
[C / C ++] Übergeben Sie den in C / C ++ berechneten Wert an eine Python-Funktion, um den Prozess auszuführen, und verwenden Sie diesen Wert in C / C ++.
[Python] So überprüfen Sie, ob der Schlüssel im Wörterbuch vorhanden ist
Kerzentabelle mit Python zeichnen
So löschen Sie stdout in Python
Zeichnen Sie MP3-Wellenformen in Python
So debuggen Sie eine Standard-Python-Bibliothek in Visual Studio
[Python] Verwendung von Matplotlib, einer Bibliothek zum Zeichnen von Diagrammen
Finde Fehler in Python
Verwendung der Methode __call__ in der Python-Klasse
Melden Sie sich auf der Website in Python an
Zeichnen Sie die Festplatte von Poancare in Python
In Python werden die Elemente in der Liste sortiert und als Elemente und Vielfache ausgegeben.
Verschiedene Methoden zur Berechnung der Ähnlichkeit zwischen Daten mit Python
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
Zeichne die Yin-Funktion in Python
Anhängen an den Python-Prozess des SSH-Ziels und Debuggen
Sprechen mit Python [Text zu Sprache]