Anwendungsübung zur Rekursion

Author

Jacques Mock Schindler

Published

11.12.2024

In diesem Notebook soll eine graphische Anwendung einer rekursiven Funktion implementiert werden. Als Grafiklibrary wird PyTamaro verwendet. In der folgenden Code Zelle werden die erforderlichen Funktionen geladen.

# Import der erforderlichen PyTamaro Funktionen
from pytamaro import (
    rectangle, Graphic, Empty,
    black,
    pin, bottom_left, bottom_right, top_left, top_right, bottom_center,
    rotate, graphic_height, overlay,
    show_graphic, save_graphic,
)

from pytamaro.de import kombiniere

Im folgenden soll es darum gehen diese Scheneeflocke

aus Elementen, wie dem folgenden

zusammenzubauen.

Dabei ist die Grundkomponente offensichtlich eine kurze Gerade.

def draw_line(length: float) -> Graphic:
    """Return a simple horizontal line as a thin rectangle of given length."""
    # draw a thin black rectangle and return it as a Graphic
    # use named arguments to be robust against different rectangle signatures
    line = rectangle(width=length, height=2, color=black)
    return line

# show a short sample line (50 units)
show_graphic(draw_line(50))

Aus dieser kurzen Geraden, kann ein einzelner Zacken zusammengebaut werden.

def compose_element(element: Graphic) -> Graphic:
    """Create a simple spike element by overlaying the given"""
    # Rotate copies of the basic line and overlay them to form a spike
    left = rotate(30, element)
    right = rotate(-30, element)
    # center the original between the two rotated copies
    spike = overlay(left, overlay(element, right))
    return spike

# create a test line and show the composed base element
testline = draw_line(50)
basiselement = compose_element(testline)
show_graphic(basiselement)

Aus diesem einzelnen Zacken ist als nächstes ein fein gezahnte Element zu bauen. Der Funktion soll als Argument die Rekutsionstiefe übergeben werden. Die vorher programmierten Funktionen können als Hilfsfunktionen aufgerufen werden.

def draw_zahnung(n: int, m = 1) -> Graphic:
    # TODO: implementieren Sie eine rekursive Funktion
    # zum zeichnen eines gezahnten Elementes
    pass        

Die so gezeichnete gezahnte Linie bildet die Basis einer Schneeflocke. Implementieren Sie eine Funktion zum zeichnen einer Schneeflocke. Der Funktion soll die Rekursionstiefe als Argument übergeben werden können.

def create_snow_flake(n: int) -> Graphic:
    # TODO: kombinieren Sie die bisherigen Element zu einer Schneeflocke
    pass

Hier finden sie die Musterlösung der Übung Schneeflocke.