Ghid esențial în realizarea fractalilor

În acest curs vom studia niște forme geometrice deosebit de interesante, fractalii.

Ce sunt fractalii?

Colocvial, un fractal este o figură geometrică fragmentată sau frântă care poate fi divizată în părți, astfel încât fiecare dintre acestea să fie (cel puțin aproximativ) o copie miniaturală a întregului”. Termenul a fost introdus de Benoît Mandelbrot în 1975 și este derivat din latinescul fractus, însemnând „spart” sau „fracturat”.

Fractalul, ca obiect geometric, are în general următoarele caracteristici:

  • Are o structură fină la scări arbitrar de mici.
  • Este prea neregulat pentru a fi descris în limbaj geometric euclidian tradițional.
  • Este autosimilar (măcar aproximativ sau stochastic).
  • Are dimensiunea Hausdorff mai mare decât dimensiunea topologică (deși această cerință nu este îndeplinită de curbele Hilbert).
  • Are o definiție simplă și recursivă.

Deoarece par identici la orice nivel de magnificare, fractalii sunt de obicei considerați ca fiind infinit complecși (în termeni informali). Printre obiectele naturale care aproximează fractalii până la un anumit nivel se numără norii, lanțurile montane, arcele de fulger, liniile de coastă și fulgii de zăpadă. Totuși, nu toate obiectele autosimilare sunt fractali—de exemplu, linia reală (o linie dreaptă Euclidiană) este autosimilară, dar nu îndeplinește celelalte caracteristici.

Preluat de pe Wikipedia

Să vedem două exemple de fractali:

  • Linia lui Koch

 

  • Triunghiul lui Sierpinski

 

Pentru a desena fractali vom avea nevoie de librăria graphics.h (vezi instrucțiuni de instalare aici).

Preliminarii

 

Pentru ca fractalii să arate cât mai detaliat, este bine să facem fereastra grafică cât de mare se poate și fractalul propriu-zis să ocupe cât mai mult din ea. Majoritatea monitoarelor moderne au una din rezoluțiile 1280×7201366×768, 1600×900, 1920×1080 (eventual 2560×1440 sau 3840×2160 pentru monitoarele UHD). Spre exemplu, pentru un monitor 1920×1080, putem initializa fereastra grafică cu dimensiunile 1800×1000 (dacă o facem mai mare de atât este posibil să nu încapă pe ecran).

De asemenea, vom dori ca majoritatea fractalilor să ocupe întreg spațiul pe care îl au la dispoziție și să fie centrați pe ecran. Prin urmare, înainte de a desena fiecare fractal, vom rezolva o problemă de geometrie pentru a determina cum îl putem centra.

În general, coordonatele centrului ferestrei grafice sunt getmaxx()/2, getmaxy()/2. Din fereastra grafică vom considera un pătrat cu latura lățimea ferestrei minus câțiva pixeli (padding) și cu centrul în centrul ferestrei. Spre exemplu, mai jos este o fereastra 800×600 cu 25px padding pe fiecare latură.

Triunghiul lui Sierpinski

Modul de construcție

Triunghiul lui Sierpinski se construiește astfel:

  1. Se desenează un triunghi echilateral
  2. Se desenează triunghiul median (care unește mijloacele laturilor)
  3. Se repetă pașii 2 și 3 pentru fiecare din cele 3 triunghiuri din margine

Construcția

Putem centra triunghiul în două moduri: fie alegem ca centrul cercului circumscris să fie în mijlocul ecranului, fie alegem așa încât colțul de sus și latura de jos să fie chiar la marginea spațiului de lucru. Cea de-a doua variantă va crea un triunghi mai mare și este mai simplă, deci o vom alege pe aceea.

Algoritmul

Așa cum am menionat mai sus, vom desena triunghiul mare, apoi triunghiul median pentru triunghiul mare si recursiv pentru cele 3 formate la colțuri.

Covorul lui Sierpinski

Modul de construcție

Covorul lui Sierpinski se deseneaza după următoarele reguli:

  1. Se desenează un pătrat
  2. Se desnează alt pătrat cu latura l/3 în mijloc
  3. Se împarte pătratul în alte 9 pătrate cu latura l/3 și se execută pașii 2 și 3 pentru fiecare, mai puțin cel din mijloc

Construcția

Centrarea pătratului este banală, vom face pătratul inițial cât spațiul de lucru. Poziția centrelor pătratelor marginale se poate afla ușor și, pentru a profita de asta, recomand determinarea unui mod de a desena un pătrat cunoscând coordonatele mijlocului și dimensiunea laturii.

Algoritmul

Trebuie scrisă funcția care va primi ca parametri coordonatele centrului pătratului și latura sa. Funcția recursivă va desena pătratul de latură l/3 în mijlocul pătratului mare și se va reapela pentru fiecare dintre cele 8 pătrate marginale.

Fractal în rețea pătratică

Modul de construcție

Acest fractal se contruiește astfel:

  1. Se desenează un pătrat
  2. în fiecare colț al acelui pătrat se desenează un alt pătrat cu latura l/2
  3. Se repetă pașii 2 și 3 pentru fiecare din cele 4 pătrate obținute la pasul anterior

Atașez mai jos o altă imagine a fractalului (de grad mai mic), dar mai sugestivă pentru a vedea modul de construcție.

Construcția

Centrea acestui fractal este mai dificilă, fiindcă el crește în exterior cu fiecare pas.

Algoritmul

Linia lui Koch

Linia lui Koch este un fractal mai dificil care necesită utilizarea funcțiilor trigonometrice. Este de asemenea unul dintre foarte puținii fractali care nu pot fi încadrați într-o fereastră pătrată.

Modul de contructie

Linia lui Koch se construiește astfel:

  1. Se desenează un segment orizontal de lungime l
  2. Se desenează în mijloc în sus un triunghi echilateral cu latura l/3 și se șterge baza sa
  3. Se repetă pașii 2 și 3 pentru fiecare segement astfel obținut (inclusiv cele de pe margine!)

Construcția

Fractalul va ocupa un dreptunghi ale cărui laturi se pot determina. Desenarea lui o vom face începănd din stănga jos.

Pentru a construi fractalul avem nevoie de o functie care desenează un segment de o lungime dată, dintr-un punct dat sub un anumit unghi. Funcțiile sinus și cosinus sunt funcții din librăria <math.h> care primesc ca parametru un număr real reprezentănd măsura unghiului în radiani.

Algoritmul

Temă – fulgul lui Koch

Fulgul lui Koch e un fractal foarte simplu care se compune din 3 linii Koch așezate sub formă de triunghi echilateral.

BONUS – Curba Hilbert

Curba Hilbert este un fractal foarte special, cu un algoritm relativ simplu și cu o aplicabilitate largă în practică (spre exemplu, la micșorarea rezoluției imaginilor).  Mai sus este reprezentată curba Hilbert de gradul 5. Dacă ne uităm cu atenție, observăm că ea este formată dintr-o singură linie continuă care începe în colțul din stânga sus și se termină în colțul din dreapta sus.

Se poate face o analogie între desenarea acestui fractal și desenarea unei forme cu creionul fără a îl ridica de pe hârtie. Pentru a ține minte unde se află „creionul” folosim două variabile globale, una pentru fiecare coordonată.

Coroborând toate aceste informații, obținem programul final care desenează o curbă Hilbert.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

iunie 2019
L Ma Mi J V S D
« mai   sept. »
 12
3456789
10111213141516
17181920212223
24252627282930