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°.

Płatek Kocha stopnia 1 i 2 Płatek Kocha stopnia 3 i 4

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.

 
1
from turtle import *
2
3
4
def koch1(bok):
5
    # n będzie zawsze 1
6
    fd(bok)
7
8
pu(); bk(180); pd()
9
koch1(300)
10

Bok stopnia 1. (1)

Teraz koch stopnia 2. Przy definiowaniu dla stopnia 2, korzystamy ze stopnia 1.

21
 
1
from turtle import *
2
3
4
def koch1(bok):
5
    fd(bok)
6
7
8
def koch2(bok):
9
    # n będzie zawsze 2
10
    koch1(bok/3)
11
    lt(60)
12
    koch1(bok/3)
13
    rt(120)
14
    koch1(bok/3)
15
    lt(60)
16
    koch1(bok/3)
17
18
19
pu(); bk(180); pd()
20
koch2(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?

29
 
1
from turtle import *
2
def koch1(bok):
3
    fd(bok)
4
5
6
def koch2(bok):
7
    koch1(bok/3)
8
    lt(60)
9
    koch1(bok/3)
10
    rt(120)
11
    koch1(bok/3)
12
    lt(60)
13
    koch1(bok/3)
14
15
16
def koch3(bok):
17
    # n będzie zawsze 3
18
    koch2(bok/3)
19
    lt(60)
20
    # tutaj trzeba uzupełnić
21
    rt(120)
22
    # tutaj trzeba uzupełnić
23
    lt(60)
24
    # tutaj trzeba uzupełnić
25
26
27
pu(); bk(180); pd()
28
koch3(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.

18
 
1
from turtle import *
2
3
4
def koch_n(bok, n):
5
    if n == 1:
6
        fd(bok)
7
    else:
8
        koch_n(bok/3, n-1)
9
        lt(60)
10
        koch_n(bok/3, n-1)
11
        rt(120)
12
        # tutaj trzeba dopisać
13
        lt(60)
14
        koch_n(bok/3, n-1)
15
16
pu(); bk(180); pd()
17
koch_n(300,4)
18

Bok stopnia n. (4)

Pozostało nam tylko narysować cały płatek Kocha.

24
 
1
from turtle import *
2
3
4
def koch_n(bok, n):
5
    if n == 1:
6
        fd(bok)
7
    else:
8
        koch_n(bok/3, n-1)
9
        lt(60)
10
        koch_n(bok/3, n-1)
11
        rt(120)
12
        koch_n(bok/3, n-1)
13
        lt(60)
14
        koch_n(bok/3, n-1)
15
16
def platek(bok, n):
17
    pu();bk(180);pd()
18
    for i in range(3):
19
        koch_n(bok, n)
20
        rt(120)
21
22
23
tracer(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 stopnia 1

entlik(10, 2)

Entlik stopnia 2

entlik(10, 3)

Entlik stopnia 3

Miejsce na rozwiązanie.

5
 
1
from turtle import *
2
3
def entlik(bok,n):
4
    pass
5

Entlik (6)

| Back to top