Rysujemy płatek Kocha¶
Napisz funkcję o nazwie platek(bok, n), po wywołaniu której powstaną rysunki takie, jak poniżej. Parametr bok określa długość boku płatka, a n stopień złożoności. Odcinki na kolejnych poziomach są trzy razy krótsze, a kąt między nimi wynosi 60°.


Krok po kroku¶
Zastanówmy się, jak powstaje płatek Kocha. Budowany jest on na bazie trójkąta, w którym zamiast boków rysowane są złożone łamane. Zaczynamy rysowanie od jednego boku i stopnia złożoności 1. Będzie to po prostu odcinek.
1from turtle import *
2
3
4def koch1(bok):
5# n będzie zawsze 1
6fd(bok)
7
8pu(); bk(180); pd()
9koch1(300)
10
Bok stopnia 1. (1)
Teraz koch stopnia 2. Przy definiowaniu dla stopnia 2, korzystamy ze stopnia 1.
211from turtle import *
2
3
4def koch1(bok):
5fd(bok)
6
7
8def koch2(bok):
9# n będzie zawsze 2
10koch1(bok/3)
11lt(60)
12koch1(bok/3)
13rt(120)
14koch1(bok/3)
15lt(60)
16koch1(bok/3)
17
18
19pu(); bk(180); pd()
20koch2(300)
21
Bok stopnia 2. (2)
A jak będzie dla stopnia 3? Czy można to zapisać z wykorzystaniem rozwiązania dla stopnia 2?
291from turtle import *
2def koch1(bok):
3fd(bok)
4
5
6def koch2(bok):
7koch1(bok/3)
8lt(60)
9koch1(bok/3)
10rt(120)
11koch1(bok/3)
12lt(60)
13koch1(bok/3)
14
15
16def koch3(bok):
17# n będzie zawsze 3
18koch2(bok/3)
19lt(60)
20# tutaj trzeba uzupełnić
21rt(120)
22# tutaj trzeba uzupełnić
23lt(60)
24# tutaj trzeba uzupełnić
25
26
27pu(); bk(180); pd()
28koch3(300)
29
Bok stopnia 3. (3)
Ogólnie¶
Teraz czas na zapis ogólny. Musimy uzględnić dwa przypadki.
Gdy n = 1, wtedy rysujemy tylko odcinek.
Gdy n > 1, wtedy rysujemy koch stopnia n przy pomocy kocha stopnia n - 1.
181from turtle import *
2
3
4def koch_n(bok, n):
5if n == 1:
6fd(bok)
7else:
8koch_n(bok/3, n-1)
9lt(60)
10koch_n(bok/3, n-1)
11rt(120)
12# tutaj trzeba dopisać
13lt(60)
14koch_n(bok/3, n-1)
15
16pu(); bk(180); pd()
17koch_n(300,4)
18
Bok stopnia n. (4)
Pozostało nam tylko narysować cały płatek Kocha.
241from turtle import *
2
3
4def koch_n(bok, n):
5if n == 1:
6fd(bok)
7else:
8koch_n(bok/3, n-1)
9lt(60)
10koch_n(bok/3, n-1)
11rt(120)
12koch_n(bok/3, n-1)
13lt(60)
14koch_n(bok/3, n-1)
15
16def platek(bok, n):
17pu();bk(180);pd()
18for i in range(3):
19koch_n(bok, n)
20rt(120)
21
22
23tracer(0); platek (200,4); update()
24
Płatek stopnia n. (5)
Inne fraktale¶
Proszę teraz samodzielnie napisać funkcję entlik(bok, n), po wywołaniu której powstaną rysunki takie, jak poniżej. Parametr bok określa długość małego odcinka, a n stopień złożoności.
entlik(10, 1)

entlik(10, 2)

entlik(10, 3)

Miejsce na rozwiązanie.
51from turtle import *
2
3def entlik(bok,n):
4pass
5
Entlik (6)