Strona główna » Poradniki » Logomocja » LOGIA » Krzywa Kocha
 

Krzywa Kocha

Krzywa Kocha

Opis

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.

Etapy rysowania

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:

Krzywa Kocha n = 0
Krzywa Kocha n = 1
Krzywa Kocha n = 2
Krzywa Kocha n = 3
Krzywa Kocha n = 4
Krzywa Kocha n = 5

Implementacja

Strategia

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.

Rozwiązanie

Oto przykładowy kod, który pozwala narysować krzywą Kocha o złożoności n oraz długości :a.

  1. oto krzywaKocha :a :n
  2.   jeżeli (:n < 1) [
  3.     np :a
  4.   ][
  5.     krzywaKocha :a/3 :n-2
  6.     lw 60
  7.     krzywaKocha :a/3 :n-1
  8.     pw 120
  9.     krzywaKocha :a/3 :n-1
  10.     lw 60
  11.     krzywaKocha :a/3 :n-2
  12.   ]
  13. już

Na podstawie (2.) wartości parametru złożoności: (3.) rysowana jest sama kreska, albo (4. - 10.) najbardziej skomplikowana część.

Płatek Kocha

Opis

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:

Płatek Kocha n = 3
Płatek Kocha n = 4
Płatek Kocha n = 5

Rozwiązanie

Oto przykładowy kod, który pozwala narysować płatek Kocha o złożoności n oraz długości boku :a.

  1. oto płatekKocha :a :n
  2.   pod
  3.   np :a/3 pw 90
  4.   ws :a/2
  5.   opu
  6.   powtórz (3) [
  7.     krzywaKocha :a :n
  8.     pw 120
  9.   ]
  10. już

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.

Zadania

Zadanie 1

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:

płatekKochan 200 3 2
płatekKochan 200 3 3
płatekKochan 200 3 4