Na podstawie zbioru Cantora można narysować bardzo ciekawy fraktal. W tym artykule zostanie wyjaśnione co to jest zbiór Cantora oraz jak na tej podstawie narysować fraktal.
Zbiór Cantora to odcinek [0, 1] z którego wycina się środką 1/3 części, a następnie wykonuje się to samo dla dwóch powstałych. W ten sposób w każdym kolejnym kroku liczba odcinków zwiększa się dwukrotnie, a zamalowana część odcinka maleje. Początkowo wynosi ona 1, potem 2/3, 4/9, 8/27 itd.
Najlepiej jest to zobrazować na rysunku. Poniżej zostały przedstawione cztery kolejne kroki wyznaczania zbioru Cantora:
Jak można zauważyć kolejne kroki wyznaczenia zbioru Cantora narysowane jedno pod drugim tworzą fraktal, ponieważ po zbliżeniu na którąkolwiek odnogę możemy dostrzec ten sam wzór.
Fraktal jest tworem rekurencyjnym i choć można go rysować w nieskończoność to przyjmuje się jakiś warunek stopu, ponieważ dalsze zmiany nie będą widoczne na obrazku. W tym przypadku zostanie przyjęte, że rysujemy zbiór Cantora n-tego rzędu. Przyjmujemy, że jeśli n > 0 to rysujemy kreskę z której wycinamy środek, a dla n = 0 rysujemy całą kreskę o zadanej długości.
Przykładowa implementacja metody ZbiorCantor() przyjmuje następujące argumenty: dl - szerokość rysunku, wytnij - część rysunku do wycięcia oraz n - ile poziomów narysować.
Jeśli n = 0 to wystarczy narysować kreskę o zadanej długości dla pozostałych przypadków obliczamy nową długość dla nie wyciętych części, a następnie rysujemy lewy, pomijamy wycięty środek i rysujemy prawą stronę.
Warto zauważyć, że kreska jest faktycznie rysowana tylko dla n = 0. Napisana funkcja w tej chwili rysuje jedynie kreskę o wybranej złożoności o czym można się przekonać wywołując:
Jednak, aby narysować pełny fraktal wykorzystując napisaną funkcję wystarczy odpowiednio ustawiać żółwia, a następnie wywołać metodę z odpowiednimi parametrami. Poniższy przykład środek fraktalu umieszcza pośrodku strony i rysuje n rzędów.
Uwaga: Warto pamiętać, że rysowanie dla dużych n może nie mieć sensu, ponieważ długości kresek w pewnym momencie będą mniejsze niż jeden piksel, a więc staną się niewidoczne.