Znalost moderního programování otevírá dveře budoucností.

asdfasdf

Algoritmické umění a fraktály

v Pythonu I.

Sdílet příspěvek

Algoritmické umění stojí na jednoduché myšlence: esteticky zajímavý výsledek nevzniká „ručním kreslením“, ale prováděním přesně definovaných pravidel. Fraktály jsou pro tento přístup ideální, protože dokážou z krátkého algoritmu vyprodukovat bohaté, „přírodně“ působící struktury. V praxi se fraktály používají v počítačové grafice, generování krajin v hrách, modelování růstu rostlin nebo jako vizuální prostředek pro vysvětlení rekurze a rozkladu problému na menší podproblémy.

V tomto dílu si projdeme dva klasické příklady realizované pomocí knihovny turtle v Pythonu:

Fraktálový keř – model přirozeného větvení, výborný pro pochopení rekurzivního „růstu“.

Kochova vločka – geometricky přesný fraktál, který ukazuje rekurzivní dělení úsečky a opakování motivu.

Fraktálový keř: rekurzivní větvení jako model růstu

Princip

Základní myšlenka je binární: každá větev vytvoří další dvě menší větve. V kódu se to typicky realizuje funkcí typu kresli_vetev(delka, uroven), která:

1. Nakreslí jednu větev délky delka.

2. Natočí se doleva o daný úhel (např. 45°) a rekurzivně nakreslí menší větev.

3. Natočí se doprava o dvojnásobek úhlu (např. 90°), čímž se dostane na druhou stranu osy, a rekurzivně nakreslí druhou menší větev.

4. Vrátí se zpět na začátek aktuální větve příkazem backward(delka), aby mohl vyšší rámec rekurze pokračovat konzistentně.

Tento návrat (turtle.backward(delka)) je klíčový: bez něj by se želva „ztratila“ v prostoru a větvení by se geometricky rozpadlo.

Parametry, které mění estetiku

Úhel větvení (uhel): standardně 45°, ale i malé změny dramaticky mění charakter keře.

Poměr zmenšování (zmenseni, např. 0.6): zajišťuje, že větve postupně zkracují délku a výkres „nebobtná“ do nekonečna.

Hloubka rekurze (uroven): pro výuku a plynulé vykreslování se typicky drží 4–5 úrovní.

Funkční příklad v Pythonu


    import turtle

    def kresli_ker(delka: float, uroven: int, uhel: float = 45, zmenseni: float = 0.6) -> None:
        """
        Rekurzivně kreslí fraktálový keř (binární větvení).

        delka     ... délka aktuální větve
        uroven    ... hloubka rekurze (doporučeno 4–5)
        uhel      ... úhel větvení (např. 30–60)
        zmenseni  ... koeficient zkrácení (např. 0.55–0.75)
        """
        if uroven == 0 or delka <= 0:
            return

        # 1) nakresli hlavní větev
        turtle.forward(delka)

        # 2) levá větev
        turtle.left(uhel)
        kresli_ker(delka * zmenseni, uroven - 1, uhel, zmenseni)

        # 3) pravá větev (otočení na druhou stranu osy)
        turtle.right(2 * uhel)
        kresli_ker(delka * zmenseni, uroven - 1, uhel, zmenseni)

        # 4) návrat do původní orientace a na začátek větve
        turtle.left(uhel)
        turtle.backward(delka)

    def main():
        turtle.setup(width=900, height=700)
        turtle.title("Fraktálový keř – rekurzivní větvení")
        turtle.speed(0)           # nejrychlejší vykreslování
        turtle.hideturtle()
        turtle.tracer(False)      # výrazně zrychlí kreslení (vypne animaci)

        # Start u spodního okraje, směr nahoru
        turtle.penup()
        turtle.goto(0, -300)
        turtle.setheading(90)
        turtle.pendown()

        # Doporučená hloubka 4–5
        kresli_ker(delka=180, uroven=5, uhel=45, zmenseni=0.6)

        turtle.update()
        turtle.done()

    if __name__ == "__main__":
        main()
    

Didaktické náměty (rychlé, ale efektivní)

Změňte uhel na 30°, 50°, 65° a porovnejte výsledek.

Změňte zmenseni na 0.55 a 0.7 – kdy keř působí „realističtěji“ a kdy „přesyceně“?

Rozšiřte model na tři větve (např. levá–střední–pravá) a sledujte, proč je pak nutné ještě pečlivěji hlídat hloubku rekurze.

Kochova vločka: rekurzivní dělení úsečky a skládání tvaru

Princip

Kochova vločka je složená ze tří Kochových křivek. Základní stavební kámen (Kochova křivka) pracuje takto:

Pokud je rekurze na nule (n == 0), nakreslí se přímá úsečka.

Jinak se úsečka rozdělí na třetiny a místo jedné úsečky se nakreslí čtyři menší úsečky v úhlovém vzoru:

vlevo 60°

vpravo 120°

vlevo 60°

Vločka vznikne tak, že se tato křivka třikrát zopakuje a po každé straně se želva otočí o 120°.

4 až 5

Praktická doporučení

Hloubka rekurze n se pro výuku obvykle volí 4 až 5. Nad 4 se může vykreslování výrazně zpomalovat (záleží na zařízení).

Vyplatí se nastavit plátno a startovní pozici tak, aby se obrazec vešel (např. 800×600 a posun startu doleva).

Funkční příklad v Pythonu


    import turtle

    def koch_curve(delka: float, n: int) -> None:
        """
        Kreslí Kochovu křivku délky 'delka' s hloubkou rekurze 'n'.
        """
        if n == 0:
            turtle.forward(delka)
            return

        delka /= 3.0
        koch_curve(delka, n - 1)
        turtle.left(60)
        koch_curve(delka, n - 1)
        turtle.right(120)
        koch_curve(delka, n - 1)
        turtle.left(60)
        koch_curve(delka, n - 1)

    def kresli_vlocku(delka: float, n: int) -> None:
        """
        Složí Kochovu vločku ze tří Kochových křivek.
        """
        for _ in range(3):
            koch_curve(delka, n)
            turtle.right(120)

    def main():
        turtle.setup(width=800, height=600)
        turtle.title("Kochova vločka – rekurze a geometrická dekompozice")
        turtle.speed(0)
        turtle.hideturtle()
        turtle.tracer(False)

        # Startovní pozice, aby se vločka vešla na plátno
        turtle.penup()
        turtle.goto(-220, 130)
        turtle.pendown()

        # Doporučená hloubka: 4–5 (při 5 už může být kreslení náročnější)
        kresli_vlocku(delka=420, n=4)

        turtle.update()
        turtle.done()

    if __name__ == "__main__":
        main()
    

Co si na vločce student skutečně osvojí

Rekurzi jako „rozklad úsečky“ (ne abstraktní definici).

Přesné předávání argumentů funkcím (delka, n) a jejich vliv na výsledek.

Kombinaci rekurze (v jedné straně) a cyklu (opakování tří stran).

Fraktálový keř je přirozený most k pochopení rekurze jako růstu a návratu v prostoru (zejména díky backward). Kochova vločka je zase čistá geometrická ukázka rekurzivního dělení a skládání složitosti z jednoduchého pravidla. V obou případech se jako didakticky velmi účinné ukazuje držet hloubku rekurze kolem 4–5, aby bylo vykreslování plynulé a žáci mohli rychle iterovat nad parametry.

Související články

Algoritmické umění a fraktály v Pythonu II.

Algoritmické umění a fraktály v Pythonu III.

PUBLIKOVÁNO
18.01.2026, 19:34
ODKAZ
https://www.weloveit.education/Article/20260118-Algoritmicke-umeni-a-fraktaly-v-Pythonu-I/
asfdasd
asfdasd
asfdasd
asfdasd
asfdasd
asfdasd

Začni hned teď
pracovat na zlepšení svých znalostí.

Vytvoř si vlastní síť zkušeností, přesně tak, jak potřebuješ.