Numărul foarte mare de puncte (milioane sau chiar miliarde) creşte volumul de
informaţie şi timpul de prelucrare. Se impune reducerea volumului de informaţie. Dacă în
loc de un număr de puncte găsim o reprezentare matematică (de exemplu ecuaţia
suprafeţei care trece prin acele puncte sau aproximativ prin ele) atunci am făcut un prim
pas în această direcţie. Ideal ar fi să găsim o singură ecuaţie pentru toate punctele. La o
sferă acest lucru este posibil. La fel la un plan (un zid!). În general acest lucru nu este
valabil.
Procesul de convertire a unui nor de puncte într-un model 3D folositor în oricare din
formele descrise mai sus se numeşte reconstrucţie sau modelare.
Există mai multe metode pentru a genera un model bazat pe suprafeţe plecând de la o
mulţime de puncte 3D furnizate, de exemplu, de un scaner. O abordare intuitivă se
bazează pe divizarea spaţiului de lucru în celule elementare (voxeli - prin analogie cu
pixeli). Un model geometric ar fi realizat din suma celulelor ocupate de obiectul real.
Modelul poate fi aproximativ, dar el se calculează uşor folosind hărţi de coordonate sau
grafuri (în engleză octree).
În reprezentarea poligonala a unei forme 3D, o suprafaţă curbată este modelată ca o reţea
de multe suprafeţe poligonale plane mici (gândiţi-vă la o sferă de discotecă formată din
mici oglinzi poligonale plane, aceea pe care o iluminează un stroboscop pentru a crea o
ambianţă tipică). Modelele bazate pe reţelele poligonale, denumite şi modele Mesh, sunt
utile pentru vizualizare, dar sunt şi dificil de utilizat din cauza volumului mare de date
care trebuie prelucrate. O altă dificultate este legată de posibilitatea de a edita suprafaţa
reprezentată în această formă. Reconstrucţia bazată pe reţele poligonale implică găsirea şi
conectarea unor puncte adiacente cu linii drepte pentru a crea o suprafaţă continuă
(triunghiuri, pătrate etc.).
În matematică, o mulţime de tip nivel (level set) pentru o funcţie f care ia valori reale
depinzând de n variabile este definită ca
{ (x1,...,xn) | f(x1,...,xn) = c }
unde c este o constantă. Prin urmare, aceasta este mulţimea punctelor de definiţie în care
funcţia ia o valoare constantă.
În continuare, fiecare cub este înlocuit de un set de poligoane, în funcţie de care margini
ale cubului au intersectat iso-suprafaţa asumnată. Pentru fiecare cub există 28 = 256
variante posibile de intersectare, şi acestea pot fi reduse la 15 prin eliminarea variantelor
simetrice. Este propus un anumit set de aproximări ale poligonului. Prin adăugarea sau
omiterea de cuburi cu toate muchiile/colţurile în interior, respectiv exterior, în literatura
de specialitate găsim 14 sau 16 variante. Datorită faptului că două cuburi vecine au
muchii comune, reţeaua de conectivităţi creata este consistentă. Totuşi algoritmul are de
asemenea şi probleme, deoarece nu toate variantele poligonale sunt compatibile unele cu
celelalte. Această metodă este aplicată tuturor cuburilor ce intersectează suprafaţa. Ca
rezultat, este produsă o reţea de suprafeţe poligonale triunghiulare, care este frecvent
utilizată pentru vizualizarea mulţimilor de coordonate tridimensionale.
Există şi metode mai precise, dar derivate din varianta de bază. Ideea de bază este să se
calculeze mai precis interpolarile (de exemplu triliniar în loc de biliniar) şi să se
implementeze algoritmi de corectare a neregularităţilor suprafeţelor. Rezultă suprafeţe
mai netede şi mai apropiate de original, dar se consumă timp de calcul mai mult pentru că
se crează mai multe triunghiuri mai mici pentru o aproximare mai bună. În practică,
descrierea analitică a topologiei sau a iso-suprafeţei pentru obiectele scanate este
necunoscută. Drept urmare, este necesară o aproximare pentru aplicarea cu succes a
metodei Marching Cubes. Pentru suprafeţe omogene şi rotunjite (smooth) fără margini şi
colţuri ascuţite se poate aproxima funcţia de calcul a distanţei într-o manieră comparabilă
cu cea de la iso-suprafeţe. Pentru fiecare punct vecinătatea locală este calculată şi
aproximată cu o funcţie cubică.
Influenţa vecinilor este limitată la o distanţă r care trebuie să fie mai mică decât o rază R
predefinită. Însuşi punctul considerat are ponderea maximă 1, această pondere (influenţă)
descreşte neliniar cu creşterea distanţei pentru realizarea unor tranziţii line. După
calcularea funcţiei iso, pentru fiecare punct (sau pentru regiuni, pentru mai multă
eficienţă) sunt detectate toate celulele care se pot afla în regiunea de interes.
Pentru fiecare colţ al celulei, funcţia este evaluată în mod analog cu abordarea standard
Marching Cube. În contrast, este propusă o altă schemă meshing ce foloseşte doar 7
aproximări poligonale diferite. Poligoanele generate sunt pur şi simplu împărţite în
triunghiuri prin conectarea punctelor din colţuri cu mijlocul lor. Această procedură nu
poate fi utilizată pentru toate tipurile de poligoane, dar este suficientă pentru a crea
suprafeţe line (smooth).
Putem semnala şi un alt algoritm mai complex pentru a produce suprafaţa mesh dintr-o
reţea de puncte neorganizate, care de asemenea se bazează pe tehnica Marching Cubes.
Această abordare constă în 3 faze şi permite modelarea adiţională o muchiilor
suprafeţelor. Pentru fiecare punct Pi în mulţimea de puncte P, este aproximat un plan
tangenţial pentru o vecinatate mică (cele mai apropiate k puncte, unde k=15). Distanţa
până la plan este de asemenea folosită ca o iso-valoare, comparabil cu abordarea
precedentă. Aici este important să se calculeze foarte corect orientarea planelor pentru a
asigura orientarea corectă a poligoanelor produse. Cea de-a doua fază optimizează
suprafaţa mesh iniţială prin ştergerea şi introducerea de triunghiuri şi puncte. Scopul este
de a reduce tringhiurile redundante şi dispensabile, în timp ce marginile sunt păstrate. O
funcţie energetică este minimizată.
Termenul Edist reprezintă pătratul distanţei dintre reţea şi norul de puncte, iar Erep descrie
raportul dintre numărul de triunghiuri şi, respectiv, numărul de puncte. Funcţia Espring
atribuie o componentă fiecărui vertex şi a fost introdusă pentru a asigura un anumit grad
În final, în a treia fază, reţeaua optimizată este subdivizată pentru a întări caracteristicile
locale. Drept urmare, este aplicat un algoritm specific pentru generarea de suprafeţe prin
subdivizare acolo unde este nevoie de reliefarea unor detalii pierdute în primele faze.
Cele trei faze sunt ilustrate în figura următoare.
a) nor de puncte iniţial neorganizat; b) faza 1: reţeaua iniţială; c) faza 2: reţeaua optimizată; d) faza 3: suprafaţa plană.
În general, mulţimea tuturor punctelor mai apropiate de un punct C din S decât de orice
alt punct din S este interiorul unui poligon (mai general polytope) numit celula Voronoi a
lui C. Mulţimea acestor poligoane acoperă tot spaţiul şi determină acoperirea
(tessellation) Voronoi corespunzatoare mulţimii S.
Diagramele Voronoy se folosesc pentru a găsi vecini mai apropiaţi în structuri de puncte.
De exemplu cel mai apropiat spital într-un oraş, cel mai asemănător obiect într-o bază de
date. Dacă se dă diagrama Voronoi atunci se poate găsi cel mai mare cerc gol într-o
mulţime de puncte care definesc un poligon. De exemplu să se construiască un
supermarket în cea mai mare zonă din oraş în care nu există concurenţă.
Din caracteristicile de mai sus rezultă nişte proprietăţi importante. Fie două triunghiuri
ABD şi BCD cu o latură comună BD. Dacă suma unghiurilor şi este mai mică de
180o atunci triunghiul satisface condiţia Delaunay. Acest fapt este important pentru că
permite utilizarea unei tehnici numite tehnica flipping. Dacă două triunghiuri nu verifică
condiţia Delaunay, atunci, schimbând latura comună BD cu latura comună AC, se vor
produce două triunghiuri care îndeplinesc condiţia Delaunay.
Pentru un algoritm de tip fliping, dacă un triunghi este non-Delaunay, atunci problema
este rezolvabilă prin schimbarea laturii comune: se construieşte orice triangulare, se
schimbă laturile comune până când nu mai există triunghiuri non-Delaunay. Efortul de
calcul este de ordinul O(n2) în raport cu schimbările de laturi, iar metoda nu se poate
extinde la dimensiuni mai mari.
Dacă vom adăuga vârfuri într-o ordine aleatoare, atunci există la fiecare introducere un
număr de triunghiuri care vor fi supuse procesului de flipping. Se poate memora istoria
împărţirii triunghiurilor şi aplicării procesului de fliping: pentru fiecare triunghi se
memorează un pointer (o adresă) către două sau trei triunghiuri care l-au înlocuit. Pentru
a găsi varful , se pleacă de la triunghiul rădăcina (primul triunghi) şi se urmează
pointerii către triunghiul care-l conţine pe , până când se găseşte un triunghi care nu a
fost încă înlocuit. În acest fel se face o economie de timp ca de la O(n2) la O(nlogn).
Metoda bazată pe tehnica “divide şi cucereşte” este o variantă a triangulării în spaţiul 2D.
Se desenează secvenţial linii care divid vârfurile în două mulţimi. Se face triangularea
Delaunay pentru ambele mulţimi. Ulterior se face o unire a celor două suprafeţe de-a
lungul liniei de separare. Pe total are loc o economie de timp în raport cu varianta în care
se aplică triangularea o singură dată. Locul unde se poate decide economia de timp este
alegerea liniei de demarcaţie.
a) b) c) d)
Plecând de la definiţia Delaunay, cercul circumscris triunghiului format de trei puncte din
mulţimea iniţială de puncte este gol dacă nu conţine alte puncte decât cele trei care l-au
definit (alte puncte sunt admise doar dacă se afla chiar pe perimetru, pe margine, şi nu în
interior). O mulţime de triunghiuri organizate într-o reţea se numeşte triangulare
Delaunay numai dacă toate cercurile circumscrise la toate triunghirile din reţea sunt
goale. Definiţia se poate extinde de la R2 la R3 înlocuind cercurile cu sfere şi triunghiurile
cu tetraedre. Pentru trei puncte coliniare nu se defineşte triangularea Delaunay. Pentru 4
puncte ale aceluiaşi cerc (vârfurile unui patrulater) triangularea Delaunay nu este unică:
un patrulater se poate împărţi în două triunghiuri în două moduri diferite care conduc la
două triangulări diferite. Iniţial trei puncte sunt conectate pentru a forma un triunghi. Un
nou punct introdus este conectat la o muchie numai dacă se află în afara cercului
circumscris triunghiului. Altfel, muchia comună dintre două triunghiuri este schimbată şi
criteriul cercului circumscris trebuie să fie reaplicat.
a) b) c)
Pentru modelarea terenului sau a unor construcţii, triangularea Delaunay oferă o mulţime
de triunghiuri pentru a fi folosite ca poligoane în modelarea 3D a respectivelor suprafeţe.
Se evită folosirea unor triunghiuri prea înguste, adică a acelora care au o arie prea mică în
raport cu aria cercului circumscris lor.
Un exemplu simplu şi intuitiv este aproximarea unei curbe date prin puncte de control:
închipuiţi-vă că în locul acestor puncte de control am avea stâlpii dintr-un gard de nuiele,
iar nuielele corespund funcţiilor spline care aproximează curba care descrie gardul în
întregime. Sunt impuse condiţii de continuitate şi derivabilitate la capetele intervalului
(nu sunt lipsuri şi nici colţuri de-a lungul curbei). Încercaţi să faceţi intuitiv trecerea de la
2D la 3D. Gândiţi-vă, de exemplu, la o minge de fotbal, o sferă, formată din petece de
piele.
O aproximare mai bună a suprafeţei care garantează tranziţii mai line între suprafeţele
învecinate este asigurată de suprafeţele Bezier şi B-Spline. Acestea sunt definite de
funcţii polinomiale pe porţiuni şi de aceea au o descriere analitică, descriere care permite
adăugarea de puncte suplimentare pe suprafaţă. Continuitatea suprafeţei este impusă, iar
Numai cu titlul de exemplu, dacă avem intervalul [a,b] = [0,3] şi subintervalele [0,1],
[1,2] şi [2,3] atunci putem să alegem funcţii polinomiale de ordin 2 şi putem pune
condiţiile de continuitate la t=1 (reprezentarea este parametrică!!) pentru primele două
intervale şi la t=2 pentru ultimele două intervale. În aceste condiţii s-ar putea obţine
funcţii spline de următorul tip:
sau :
O întreagă teorie este dezvoltată şi aplicată pentru utilizarea funcţiilor spline pentru
determinarea curbelor şi suprafeţelor definite prin puncte.
O curbă Bezier este o curbă reprezentată parametric. Cea mai mare utilizare a acestor
curbe se întâlneşte în grafica pe calculator. Prin generalizarea la dimensiuni mai mari se
ajunge la suprafeţe Bezier (triunghiul Bezier este un caz special). Curba este definită de
un nor de puncte de control. Transformările afine (translaţii, scalări, rotaţii) pot fi aplicate
asupra curbei prin manipularea punctelor de control. Cele mai utilizate curbe Bezier sunt
cele de ordinul doi şi trei, patratice şi cubice. Dacă se utilizează grade mai mari trebuie să
ne aşteptăm la creşterea foarte puternică a timpului de calcul. Curbele individuale sunt
O curbă Bezier se poate aproxima şi printr-o secvenţă de segmente. Dacă punctele sunt
multe şi dese atunci aproximarea poate fi satisfacatoare, dar s-ar putea să se piardă mult
timp pentru că multe puncte se vor folosi şi acolo unde curba însăşi este destul de liniară.
O manieră adaptivă se poate baza pe divizarea succesivă a curbei în părţi mai mici şi
verificarea pentru fiecare porţiune a modului în care curba este bine aproximată (cu o
toleranţă sau eroare impusă) de un segment. Dacă aproximarea nu este acceptabilă, atunci
porţiunea se divide în două jumătăţi şi procedura se aplică recursiv pentru fiecare
jumătate.
O curbă Bezier liniară este chiar linia dreaptă definită de doua puncte P0 si P1 într-o
manieră similară cu procesul de interpolare:
O curbă pătratica Bezier este o curbă parabolică şi care trece prin trei puncte P0, P1, şi P2,
Patru puncte P0, P1, P2 şi P3 în plan sau în spaţiul tridimensional se poate defini o curbă
Bezier cubică. Curba pleacă din P0, trece printre punctele P1, P2 şi sfârşeşte în P3.
Punctele P1 şi P2 sunt utilizate pentru a determina direcţia curbei. Distanţa P0P1
determină “cât de mult” se merge către P2 înainte de a se îndrepta spre P3. P0P1 şi P2P3
sunt tangentele în P0 şi respectiv P3.
De exemplu pentru n = 5:
O suprafaţă Bezier de ordin (n,m) este definită printr-o mulţime de (n + 1)(m + 1) puncte
de control Kij. De exemplu, dacă k sunt toate puncte în spaţiul cu patru dimensiuni R4
atunci suprafaţa va fi şi ea în spaţiul cu patru dimensiuni R4. O suprafaţă Bezier
bidimensională poate fi definită ca o suprafaţă parametrică unde poziţia punctului p, ca
funcţie parametrizată de coordonatele u şi v, este dată de:
Din acest motiv se practică descompunerea petecelor Bezier în petece triunghiulare, deci
plane. Această relaţie se numeşte randare 3D (3D Rendering pipeling). Dacă randarea se
face cu un număr foarte mare de triunghiuri foarte mici atunci graniţele dintre triunghiuri
nici nu se văd.
NURBS este sigla pentru Non-uniform rational basis spline care este un model matematic
foarte utilizat pentru reprezentarea curbelor, atât pentru cele reprezentate analitic (cu
formule) cât şi pentru cele definite explicit (prin puncte). Această reprezentare oferă
flexibilitate şi precizie.
Punctele de control determină forma curbei. Fiecare valoare într-un punct al curbei se
calculează ca o sumă ponderată a valorilor asociate punctelor de control. Ponderile
fiecărui punct variază în funcţie de parametrul ales. Pentru o curbă de grad d, ponderile se
schimbă în cele d+1 intervale ale parametrului, după o funcţie polinomială (funcţie de
bază) de grad d. La marginile intervalului funcţiile de bază converg lin la zero. Faptul că
un singur punct de control infuenţează numai în acele intervale unde este activ este o
proprietate foarte convenabilă: în acest fel se pot schimba numai anumite părţi din
suprafaţă fără a modifica restul. Cu cât sunt mai multe puncte de control, cu atât cresc
şansele să crească precizia de reprezentare a curbelor. Fiecare punct de control este
ponderat, ceea ce a impus numele de “raţional” în NURBS. Aceste ponderi ajută la
obţinerea unui control mai bun al formei fără a mări neaparat numărul de puncte de
control.
Punctele de control pot avea dimensiune, adică iau mai mult de o valoare. De exemplu, se
utilizează foarte mult puncte de control tridimensionale. În acest mod se pot asocia
punctelor de control informaţii suplimentare (strălucirea culorii în prelucrarea imaginilor,
poziţii şi orientări pentru braţul unui robot). În această manieră se face şi trecerea către
suprafeţele NURBS. Fiecare punct de control devine un vector de puncte de control care
defineşte o curbă. Aceste curbe au aceelaşi grad şi număr de puncte de control. Prin
interpolarea vectorilor punctelor de control peste dimensiunea parametrului se obţine o
mulţime de curbe care definesc suprafata.
Vectorul nodurilor este o sevenţă de valori pentru parmetru care determină unde şi cum
afectează punctele de control curba NURBS. Numărul nodurilor este egal cu al punctelor
Noduri consecutive pot avea aceeaşi valoare. Atunci intervalul are lungime zero, două
puncte de control se activează simultan şi două se dezactivează. În acest fel se pot crea
colţuri într-o reprezentare NURBS care altfel este lină, rotundă. În acest fel se asociază
nodurilor ordinul de multiplicitate (doi sau trei, dar nu mai mult de gradul curbei). Pentru
NURBS de ordinul întâi, fiecare nod corespunde la un punct de control.
Nodurile sunt utile pentru a face calculele, utilizatorul poate să nu le vadă dacă foloseşte
un program specializat. Sunt şi programme care îi dau utilizatorului posibilitatea să
controleze nodurile. Controlul punctelor de control rămâne un mijloc mult mai intuitiv de
influenţare a formei curbei sau suprafeţei.
Ordinul curbei NURBS este numărul de puncte de control care influenţează un anumit
punct al curbei. Curba este reprezentată matematic prin polinoame de grad cu unu mai
mic decât ordinul curbei. Curbele de ordinul doi care sunt reprezentate prin polinoame
liniare (de grad unu) sunt numite liniare. Curbele de ordin trei sunt numite pătratice, iar
cele de ordin patru sunt numite cubice. Numărul punctelor de control trebuie să fie mai
mare sau egal cu ordinul curbei.
În practică, cele mai utilizate sunt curbele cubice. Crescând gradul creşte şi timpul de
calcul. Se utilizează în aplicaţii speciale curbe de ordin cinci sau şase, dar nu mai mult.
unde k este numărul punctelor de control Pi , iar wi sunt ponderile. Numitorul a fost
introdus pentru normalizare: să dea unu dacă toate ponderile sunt unu.
unde funcţiile
Curbele spline non-raţionale sau curbele Bezier pot aproxima un cerc, dar nu pot să-l
reprezinte exact. Funcţiile spline raţionale pot reprezenta orice secţiune conică, inclusiv
un cerc, în mod exact. Această reprezentare nu este unică, dar se poate da un exemplu.
x y z Ponderi
1 0 0 1
1 1 0 2/2
0 1 0 1
-1 1 0 2/2
-1 0 0 1
-1 -1 0 2/2
0 -1 0 1
1 -1 0 2/2
1 0 0 1
Se crede că cercul este compus din patru arce legate între ele cu noduri duble. S-ar putea
crede ca noduri duble în reprezentări NURBS de ordinul trei ar putea duce la
nederivabilităţi (la ordinul întâi, adică colţuri). Totuşi nodurile sunt astfel poziţionate
încât funcţia este derivabilă. De fapt curba este indefinit derivabilă în orice punct, aşa
cum şi trebuie să fie dacă reprezintă un cerc.
Curba reprezintă exact cercul, dar nu este exact parametrizată în raport cu lungimea
arcului de cerc. Adică punctul de la momentul t nu se află la (sin(t), cos(t)) cu excepţia
începutului, mijlocului şi sfârşitului fiecărui sfert de cerc. Acest fapt se datorează faptului
că altfel x ar reprezenta o valoare exactă şi raţională a lui cos(t), ceea ce nu este posibil.
Cercul nu face o rotaţie completă când parametrul t merge de la o la 2, iar acest lucru se
datorează faptului că vectorul nodurilor a fost arbitrar ales ca multiplu de