Algoritmické umění a fraktály
v Pythonu II.
Rekurze, geometrie a praktické algoritmy v knihovně turtle
Algoritmické umění představuje efektivní způsob, jak propojit výuku programování s vizuálně atraktivními výstupy. V této navazující části se zaměříme na dva významné fraktální obrazce – Sierpinského trojúhelník a Hilbertovu křivku. Oba příklady rozvíjejí práci s rekurzí, funkcemi a prostorovou představivostí, avšak každý z nich akcentuje odlišný algoritmický princip i didaktický přínos.
Sierpinského trojúhelník – rekurzivní dělení plochy
Sierpinského trojúhelník patří mezi základní fraktální útvary využívané ve výuce algoritmizace. Jeho hlavní charakteristikou je rekurzivní dekompozice plochy – původní trojúhelník se opakovaně rozděluje na tři menší trojúhelníky, přičemž středový je vynechán.
Algoritmický princip
Základem algoritmu je práce s vrcholy trojúhelníku reprezentovanými jako seznam souřadnic. Pro výpočet nových trojúhelníků je nezbytné:
vypočítat středy stran (aritmetický průměr souřadnic),
rekurzivně volat vykreslovací funkci pro tři rohové trojúhelníky,
řídit hloubku rekurze parametrem uroven.
Barevné odlišení jednotlivých úrovní pomocí seznamu barev a operátoru modulo zvyšuje názornost algoritmu a podporuje experimentování.
Funkční příklad v Pythonu
import turtle
def stred(p1, p2):
"""Vrátí střed úsečky mezi body p1 a p2."""
return ((p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2)
def nakresli_trojuhelnik(t, body, barva):
"""Vykreslí vyplněný trojúhelník dané barvy."""
t.fillcolor(barva)
t.begin_fill()
t.up()
t.goto(body[0])
t.down()
t.goto(body[1])
t.goto(body[2])
t.goto(body[0])
t.end_fill()
def sierpinski(t, body, uroven, barvy):
"""Rekurzivně vykreslí Sierpinského trojúhelník."""
nakresli_trojuhelnik(t, body, barvy[uroven % len(barvy)])
if uroven > 0:
sierpinski(
t,
[body[0], stred(body[0], body[1]), stred(body[0], body[2])],
uroven - 1,
barvy
)
sierpinski(
t,
[body[1], stred(body[0], body[1]), stred(body[1], body[2])],
uroven - 1,
barvy
)
sierpinski(
t,
[body[2], stred(body[2], body[1]), stred(body[0], body[2])],
uroven - 1,
barvy
)
# Nastavení plátna a želvy
screen = turtle.Screen()
screen.setup(800, 600)
t = turtle.Turtle()
t.speed(0)
t.hideturtle()
barvy = ["blue", "red", "green", "yellow"]
body = [(-200, -100), (0, 200), (200, -100)]
sierpinski(t, body, 4, barvy)
screen.mainloop()
Didaktický přínos
Sierpinského trojúhelník je vhodný zejména pro:
pochopení rekurzivního rozkladu problému,
práci se seznamy a předáváním argumentů,
rozvoj logického a geometrického myšlení.
Hilbertova křivka – rekurze v pohybu prostoru
Hilbertova křivka představuje pokročilejší fraktální útvar, který na rozdíl od Sierpinského trojúhelníku nepracuje s plochou, ale s kontinuálním zaplněním prostoru pomocí jediné křivky. Její význam přesahuje estetickou rovinu a má konkrétní technické využití.
Algoritmická struktura
Implementace je založena na rekurzivní funkci, která:
pracuje s parametry hloubky rekurze, úhlu otáčení a délky kroku,
provádí čtyři rekurzivní volání v jednom kroku,
využívá kladné i záporné úhly k zajištění správné orientace křivky.
Tento typ rekurze je pro studenty náročnější, protože vyžaduje sledování směru a pořadí volání.
Funkční příklad v Pythonu
import turtle
def hilbert(t, uroven, uhel, krok):
"""Rekurzivně vykreslí Hilbertovu křivku."""
if uroven == 0:
return
t.right(uhel)
hilbert(t, uroven - 1, -uhel, krok)
t.forward(krok)
t.left(uhel)
hilbert(t, uroven - 1, uhel, krok)
t.forward(krok)
hilbert(t, uroven - 1, uhel, krok)
t.left(uhel)
t.forward(krok)
hilbert(t, uroven - 1, -uhel, krok)
t.right(uhel)
# Nastavení plátna
screen = turtle.Screen()
screen.setup(800, 600)
t = turtle.Turtle()
t.speed(0)
t.hideturtle()
t.up()
t.goto(-100, 100)
t.down()
hilbert(t, 4, 90, 10)
screen.mainloop()
Praktické využití
Hilbertova křivka nachází uplatnění zejména v:
mapování dat a databázových indexech,
algoritmech prostorového dělení,
vizualizaci složitých datových struktur a algoritmů.
Didaktický význam
Z pohledu výuky programování umožňuje:
procvičit složitější formy rekurze,
pochopit význam parametrů a jejich změn v rekurzivních voláních,
propojit matematiku, algoritmizaci a informatiku s reálnými aplikacemi.
Sierpinského trojúhelník a Hilbertova křivka představují dva rozdílné, ale vzájemně se doplňující přístupy k fraktální geometrii v Pythonu. První klade důraz na rozklad plochy a práci se strukturami dat, druhý na řízení pohybu v prostoru a algoritmickou přesnost. V didaktickém kontextu jsou oba obrazce velmi vhodné pro projektovou a soutěžní výuku, kde studenti mohou experimentovat s parametry, barvami i vlastními úpravami algoritmů.
Související články
Algoritmické umění a fraktály v Pythonu I.
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-II/