Zeichnen Sie "Farn programmgesteuert zeichnen" in Python

Ich habe die Serie "Farn programmatisch zeichnen" genutzt und sie auch in Python geschrieben.

Ausgabeergebnis

Screenshot_from_2014-05-27 00:35:50.png

Quellcode

Rekursive Aufrufversion

import random

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(im, k, x, y):
    if 0 < k:
        f(im, k - 1, W1x(x, y), W1y(x, y))
        if random.random() < 0.3:
            f(im, k - 1, W2x(x, y), W2y(x, y))
        if random.random() < 0.3:
            f(im, k - 1, W3x(x, y), W3y(x, y))
        if random.random() < 0.3:
            f(im, k - 1, W4x(x, y), W4y(x, y))
    else:
        s = 490
        im.putpixel((int(x * s + width * 0.5), int(height - y * s)), (0, 128, 0))

if __name__ == '__main__':
    from PIL import Image
    im = Image.new("RGB", (width, height), (255, 255, 255))
    f(im, N, 0, 0)
    im.show()

Dies ist etwas unattraktiv, da die Funktion f () bildbezogene Argumente übergibt und die Zeichenlogik in die Funktion geschrieben werden muss. Deshalb habe ich versucht, Pythonic etwas mehr zu verwenden.

Rekursive Call + Generator-Version

import random

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

if __name__ == '__main__':
    from PIL import Image
    im = Image.new("RGB", (width, height), (255, 255, 255))
    for p in f(N, 0, 0):
        im.putpixel((int(p[0]), int(p[1])), (0, 128, 0))
    im.show()

Zusammenfassung

Recommended Posts

Zeichnen Sie "Farn programmgesteuert zeichnen" in Python
Geben Sie "Farn programmgesteuert zeichnen" in den Zeichenprozess in Python ein
Zeichnen Sie ein Diagramm mit Python
Zeichnen Sie "Farn programmgesteuert zeichnen" in Python - Keine Wiederholung + Generator-Version -
Zeichnen Sie MP3-Wellenformen in Python
Zeichnen Sie die Festplatte von Poancare in Python
Zeichne die Yin-Funktion in Python
Zeichne ein Herz in Python
Zeichnen Sie Sinuswellen mit Blender Python
Zeichnen Sie Knoten interaktiv mit Plotly (Python)
Zeichnen Sie eine Streudiagrammmatrix mit Python
Zeichnen Sie ein CNN-Diagramm in Python
Quadtree in Python --2
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Zeichnen Sie Nozomi Sasaki in Excel mit Python
Zwietracht in Python
Mit Python Teil 2 ein Herz zeichnen (SymPy Edition)
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
Zeichnen Sie mit graphviz eine Baumstruktur in Python 3
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
Zeichnen Sie Konturlinien, die in Lehrbüchern erscheinen (Python).
Zeichnen Sie Diagramme in Julia ... Überlassen Sie die Diagramme Python
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python