Krzywa Kocha jest to krzywa fraktalna. Jest ona nieskończenie długa (dla nieskończonej złożoności), ale mieści się na skończonej powierzchni. Została ona opisana po raz pierwszy w pracy Sur une courbe continue sans tangente obtenue par une construction géométrique élémentaire przez Helgego von Kocha w roku 1904.
Ze względu na to, że fraktale są nieskończone to przyjmujemy, że ustalamy dla fraktala jego złożoność n. Fraktal o złożoności n = 0 to kreska o długości a. Jednak dla n > 0 przyjmujemy, że kolejno należy narysować: krzywą Kocha o a/3 i złożoności n-2, potem skręcić w lewo i narysować krzywą Kocha o a/3 i złożoności n-1, skręcić w prawo o 120 i narysować krzywą Kocha o a/3 i złożoności n-1, a na koniec obrócić w lewo o 60 i narysować taką samą krzywą Kocha jak na początku.
Poniżej zostały przedstawione krzywe Kocha dla różnych złożoności:
Fraktale najwygodniej się rysuje przy pomocy rekurencji. Podczas kroku rekurencji należy zdecydować jak będzie wyglądał fragment rysunku. Dla złożoności n = 0 wystarczy narysować prostą kreskę, a dla większych wartości fragmenty opisany wcześniej. Procedura będzie sama siebie wywoływała, aby narysować wszystkie fragmenty.
Oto przykładowy kod, który pozwala narysować krzywą Kocha o złożoności n oraz długości :a.
Na podstawie (2.) wartości parametru złożoności: (3.) rysowana jest sama kreska, albo (4. - 10.) najbardziej skomplikowana część.
Płatek Kocha powstaje poprzez narysowanie trzech Krzywych Kocha w taki sposób, że razem tworzą jedną figurę. Tak samo jak w poprzednim przypadku możliwe jest ustawienie złożoności tak, aby rysowanie zakończyło się w określonym momencie. Oto przykładowe rysunki płatków Kocha:
Oto przykładowy kod, który pozwala narysować płatek Kocha o złożoności n oraz długości boku :a.
Na podstawie (2. - 5.) wartości parametru długości żółw jest odpowiednio przesuwany tak, aby środek rysunku znajdował się pośrodku strony. Potem (6. - 8.) rysowane są trzy powtórzenia krzywej Kocha.
Napisz procedurę płatekKochan, która będzie przyjmowała trzy argumenty: :r - odległość początku i końca krzywej od środka ekranu, :n - złożoność krzywej Kocha oraz :ile - ile boków ma mieć płatek. Wynikiem działania funkcji powinien być płatek Kocha, ale nie o :ile bokach. Oto przykładowe wywołania procedury: