Sunteți pe pagina 1din 5

PROGRAMAREA CALCULATOARELOR SI LIMBAJE DE PROGRAMARE – CURS 10

pentru orice nod s, Minim[v]<=Apel[Tata[v]], deoarece


1. COMPONENTELE BICONEXE există arce de revenire de la s la tatăl său şi eventual la alţi
strămoşi. Condiţia ca nodul s să fie centrul componentei
este:
Rezolvarea unui graf (neorientat) se poate face printr-o
Minim[s] = Apel[Tata[s]]
metodă bazată pe parcurgerea în adâncime a grafului.
unde s nu trebuie să fie rădăcina arborelui de acoperire în
Dacă (v,w) aparţine lui R, atunci subgraful având nodurile v
adâncime, adică Apel[s]<=2. În caz contrar (adică Minim[s]
şi w şi muchia (v,w) este biconex. Fiecare muchie a grafului
<= Apel[Tata[s]]), ar însemna că există un descendent al lui
aparţine unei singure componente biconexe. Altfel spus,
w, legat printr-un arc de revenire cu un nod u strămoş al
componentele biconexe ale unui graf induc o partiţie pe
tatălui lui s (cu Apel[u] < Apel[Tata[s]]). Aceasta ar duce la
muchiile sale. Totodată, dacă există un ciclu simplu prin
concluzia că u, s şi w sunt într-un ciclu simplu, deci în
nodurile u şi v atunci u şi v aparţin aceleiaşi componente
aceeaşi componentă biconexă şi că Tata[v] nu are cea mai
biconexe. Rezultatul parcurgerii grafului în adâncime
mică valoare Apel.
evidenţiază două proprietăţi valabile pentru orice graf
(neorientat): Odată depistat centrul componentei biconexe, celelalte
noduri se stabilesc utilizând mulţimea ClasaCurentă care
 nu există arce de traversare; după cum ştim, un astfel de conţine nodurile vizitate dar neincluse încă într-o
arc (v,w) uneşte nodul v în curs de explorare cu un nod componentă biconexă. În componenta biconexă cu centrul în
w complet explorat (care nu-i este nici descendent, nici s se includ nodurile din ClasaCurentă având Apel[I] >=
strămoş); graful fiind neorientat, existenţa arcului (v,w), Apel[v]. Eliminarea din ClasaCurentă a nodurilor incluse
implică şi existenţa arcului (w,v), care a fost explorat într-o componentă biconexă este esenţială pentru găsirea
din nodul w; el aparţine deci reuniunii A R  I şi, ca celorlalte componente biconexe.
urmare, ar implica v ->*w sau w ->*v; deci (v,w) nu
Algoritmul
poate fi arc de traversare.
ExplorareRecursivă2 (s)
 fiecare arc de revenire este inversul unui arc de arbore
sau de înaintare. { Minim(s) <- Apel[s]
Urmărind parcurgerea unei componente biconexe, observăm adaugă s la Vizite
că primul arc traversat este de arbore. Vârful acestuia indică pentru toate nodurile nw adiacente
un nod numit centrul componentei, deoarece joacă un rol execută
special în găsirea componentei biconexe. Toate arcele de {dacă nw nu aparţine lui Vizitate
revenire ce pleacă din nodurile descendente centrului se atunci
determină sub, sau cel mult în tatăl centrului. Eliminarea
{introdu nw in ClasaCurentă
acestuia taie toate legăturile între nodurile care îi sunt
succesoare şi celelalte noduri ale grafului. Tatăl centrului contor1 <- contor1+1
este deci punct de articulare. Apel[nw] <- contor1
În schimb un nod oarecare v nu este punct de articulare dacă Tata[nw] <- s
şi numai dacă din oricare fiu w al său este posibilă atingerea ExplorareRecursivă2 (nw)
oricărui strămoş al lui v, folosind o cale formată din Minim[s] <- min(Minim[s], Minim[nw])
descendenţi ai lui w şi un arc de revenire (w,z). Cu alte }
cuvinte, v şi w sunt într-un ciclu care-l conţine şi pe z
dacă Apel[nw] < Apel[s]
(diferit de primele două).
atunci
Determinarea componentei biconexe se poate termina în
momentul încheierii explorării centrului său, folosind Minim[s] <- min (Minim[s], Apel[nw])
proprietăţile parcurgerii în adâncime a grafului. O }
componentă biconexă include centrul s, tatăl acestuia, dacă Apel[s] >= 2 şi Minim[s] = Apel[Tata[s]]
precum şi descendenţii lui s accesibili prin căi ale arborelui atunci
de acoperire în adâncime care nu trec prin alte centre. elimină din clasa curentă nodurile I cu Apel[I] >=Apel[s]
Conform parcurgerii în adâncime, tatăl centrului unei care împreună cu Tata[s] formează componente biconexe
componente biconexe are cea mai mică valoare Apel, iar cu centrul în s
prin definiţie centrul are valoarea imediat următoare. Pentru
determinarea lor se pot utiliza valori Minim. Pentru un graf }
nedirijat definiţia de valori este puţin modificată: Programul principal este:
Minim[s] = min ({Apel[s]}  {Apel[z] | (s,z) aparţine lui R} {citeşte graful
{Minim[w] | (s,w) aparţine lui A}) iniţializează contor1, contor 2, Vizitate, ClasaCurentă şi
Tata la zero
O variantă nerecursivă a acestei relaţii este următoarea:
pentru toate nodurile s
Minim[s] = min ({Apel[s]} {Apel[z] | există w descendent
execută
al lui s şi (w,z) aparţine lui R}) dacă s nu aparţine lui Vizitate
Considerând aceeaşi strategie de eliminare a unei atunci
componente biconexe odată depistată, observăm că această { introdu s in ClasaCurentă
operaţie nu trebuie să elimine tatăl centrului care poate face contor1 <- contor1+1
articularea cu o altă componentă biconexă. Este evident că Apel[s] <- contor1
1
PROGRAMAREA CALCULATOARELOR SI LIMBAJE DE PROGRAMARE – CURS 10
ExplorareRecursivă2 (s) } rezultând un punct numit "punct mască
} potenţial".

2. ALGORITMI PENTRU SIMULARE 3D


2.1.2. Se compară distanţa de la observator la
Pentru o reprezentare mai apropiată de realitate a corpurilor punctul obiectiv cu cea de la observator la
3D în condiţii precizate de observare, trebuie determinat punctul mască potenţial.
care dintre muchiile şi faţetele obiectelor considerate sunt 2.1.2.1. Se modifică atributul corespunzător
vizibile. Vizibilitatea se determină din centrul de proiecţie punctului obiectiv din 0 în 1 (punctul
pentru proiecţiile în perspectivă sau după direcţia de este invizibil).
proiecţie, în cazul proiecţiilor paralele. 2.2. Se continuă parcurgerea punctelor.
Etapele necesare ascunderii liniilor şi suprafeţelor mascate 3. Se trece la faţeta următoare.
consumă mult timp, ceea ce impune structurarea cu grijă a
algoritmilor. După parcurgerea completă a acestui algoritm, zona
Pentru a aprecia mai corect complexitatea problemei, să atributelor de vizibilitate stochează informaţia completă cu
presupunem că dorim să obţinem imaginea unui corp privire la vizibilitatea punctelor prin care corpul este
reprezentat prin NF faţete. aproximat. Pentru o reprezentare completă a corpului, este
Există două modalităţi de abordare a problemei: insă nevoie de informaţii cu privire la vizibilitatea tuturor
 Algoritmi "spaţiu-obiect" punctelor de pe suprafaţa acestuia.
 Algoritmi "spaţiu-imagine" Pentru exemplificare se va considera cazul corpurilor
Primii iau în considerare faptul că la receptorul vizual ajung reprezentate prin reţea de faţete triunghiulare, observate
numai razele de lumină reflectate de porţiunile de faţetă dintr-un punct oarecare O (xo,yo,zo). Se presupune că pentru
nemascate (între acestea şi observator nu se interpune nici o descrierea unei faţete se dispune de coordonatele carteziene
altă faţetă). Deci se compară fiecare faţetă dintre cele NF ale vârfului triunghiului, precum şi de coordonatele în planul
existente cu toate celelalte faţete ale corpului, în scopul de a
elimina acele porţiuni care nu sunt vizibile (sunt mascate). vârfuri M1 M2 M3
Subrutinele de comparare sunt parcurse de NF × NF ori. Coordonate reale x1y1z1 x2y2z2 x3y3z3
Algoritmii "spaţiu-imagine" presupun analiza pixel cu pixel Coordonate ecran q1w1 q2w2 q3w3
a zonei de lucru din ecran pentru a determina care anume ecranului ale proiecţiilor vârfurilor.
dintre faţete este vizibilă într-un anumit punct. Dacă ecranul
are NP pixeli, atunci subrutinel de comparare vor fi parcurse Pentru fiecare faţetă se parcurg toate punctele corpului. Un
de NF × NP ori. punct oarecare M va fi identificat prin coordonatele reale
Se observă că NF2 << NF × NP. Am fi tentaţi să credem că (x1y1z1) şi prin proiecţia pe ecran (q1w1).
efortul de calcul va fi mai important în abordarea "spaţiu- Pentru fiecare punct (mai puţin M 1M2M3), se testează
imagine". În realitate, chiar pentru valori relativ mici ale NF, condiţia ca proiecţia lor să fie interioară proiecţiei faţadei.
algoritmii "spaţiu imagine" sunt mai rapizi, deoarece Transpunerea matematică se bazează pe propoziţia: "Un
subrutinele de comparare individuală sunt mult mai simple punct este interior unui triunghi atunci când, faţă fiecare
şi deci consumă mai puţin timp. latură, el se află de aceeaşi parte a acesteia caşi vârful opus
laturii respective.
2.1. Tratarea imaginilor "spaţiu-obiect" Dată fiind ecuaţia dreptei prin două puncte
Se parcurg următoarele etape: (x - x1) (y - y1) - (x2 - x1) (y2 - y1) = 0
1. Se iniţializează la valoarea 0 un vector de dimensiune
egală cu numărul de puncte prin care este reprezentat A x x B
corpul. Acest vector este numit "zona atributelor de
vizibilitate". M x
(Pentru simplificare se foloseşte o codificare în care E (M,A,B) = E (xM, yM, x1, y1, x2, y2) = (x - x1) (y - y1) -
simbolul 0 marchează punctele vizibile, iar 1 semnifică - (x2 - x1) (y2 - y1)
faptul că în condiţiile date punctul nu se vede.) Prin SGN (E) se determină punctele obiectiv (M).
2. Se generează sau se citesc în ordine faţetele curente, Urmează determinarea punctului mască potenţial pentru
determinate, de exemplu, printr-un număr dat de puncte perechea (faţetă curentă, punct obiectiv). Pentru aceasta se
de pe suprafaţa corpului. construieşte sistemul:
2.1. Se parcurg, pentru fiecare faţetă, toate punctele de
pe suprafaţa corpului, pentru a le reţine pe cele ale
căror proiecţie pe ecran se află în interioarul (sau pe xp  x1 yp  y1 zp  z1
frontiera) proiecţiei faţetei curente (numite puncte
obiectiv). x 2  x1 y2  y1 z 2  z1  0
Dacă punctul satisface condiţia anterioară:
2.1.1. Se face intersecţia între dreapta de la punctul
x 3  x1 y3  y1 z3  z1
obiectiv la observator cu faţeta curentă, Ecuaţia planului care

2
PROGRAMAREA CALCULATOARELOR SI LIMBAJE DE PROGRAMARE – CURS 10
trece prin 3 puncte date 6.1.3. Se continuă transpunerea prin baleiere a
poligonului pe ecran.
6.2. Se trece la alt poligon.
Condiţia z (q,w) > P (q,w) ne arată, atunci când este
îndeplinită, că punctul A (x,y,z) este mai apropiat de
Ecuaţia în 3D a
observator, deci îl acoperă pe cel dinainte.

xp  xo yp  xo xp  x1
dreptei OM
Calculele pe care trebuie să le facem pentru a obţine cota z

 
(q,w) pentru un pixel A'(q,w) corespunzător unui pixel
După dezvoltare, sistemul va avea A(x,y,z) pot fi simplificate, deoarece poligoanele sunt plane.
forma: Este nevoie de coordonatele a trei puncte din planul

xM  x0 yM  yo zM  zo
poligonului pentru a obţine ecuaţia planului respectiv. De
obicei se aleg trei vârfuri ale poligonului.
 a11 a12 a13   xp   b1 
      Algoritmii din familia "z-buffer" sunt destinaţi eliminării
a 21 a 22 a 23   yp    b 2  suprafeţelor ascunse. Ei pot fi folosiţi şi ca algoritmi de

a 31 a 32 a 33

 
 zp  
 b3 
 îndepărtare a liniilor ascunse. Pentru aceasta este suficient să
atribuim în mod artificial valori de intensitate pixelilor unui
După calcularea lui P (xpypzp) se vor afla distanţele OM şi poligon (0 pentru poligon, 1 pentru frontieră).
OP ţinând cont de faptul că
Linie de baleiaj (scan-line)
Algoritmii de acest tip reconstituie
2 2 2
d ( A, B)  ( x 2  x1)  ( y2  y1)  (z 2  z1) imaginea linie cu linie, tratând
ansamblul faţetelor poligonale care
urmând algoritmul precizat anterior. descriu corpul. Sunt recomandabile atunci când nu se
dispune de memorie foarte mare, pentru număr mare de
2.2. Algoritmi "spaţiu-imagine" faţete, fiind însă mai lenţi şi performanţele lor fiind
dependente de complexitatea corpului de reprezentat.
Buffer de adâncime Consumul de memorie este dictat de necesitatea creării unor
Sunt uşor de implementat, dar prezintă dezavantajul de a tabele în care se ţine evidenţa muchiilor şi faţetelor parcurse
necesita memorie suplimentară pentru păstrarea valorilor de linia de baleiaj la un moment dat, în procesul de
cotei Z ale unor mulţimi de puncte bine detreminate. Cel construire linie cu linie a imaginii.
mai eficient algoritm din această familie (ca viteză de lucru) Tabelele necesare sunt:
este algoritmul "ecran z-buffer":
a) O listă de muchii care va conţine toate muchiile
1. Se creează un masiv bidimensional (matrice) în care poligoanelor ce descriu corpul cu excepţia celor
fiecărui pixel de pe ecran să-i corespundă un element orizontale (acestea vor fi conţinute integral în linia de
din masiv (masiv ecran z-buffer). baleiaj şi deci caracterizate complet prin extremităţi.
2. Se iniţializează (pentru fiecare poziţie de reprezentat a
corpului) z-buffer-ul la o valoare "foarte îndepărtată" a b) O listă de poligoane, în care să fie cuprinse toate
lui z, care prezintă siguranţa că nici unul dintre punctele poligoanele ce acoperă corpul, dispunând fiecare de:
corpului nu o va atinge în cursul transformării 3D 1. Coeficienţii A, B, C, D din ecuaţia
aplicate. Pentru reperele de reprezentare, se întâlnesc Ax + By + Cz + D = 0
două situaţii: a planului în care se află poligonul.
3. Dacă xOyz este un triedru drept, z-buffer-ul se 2. O variabilă de stare care să indice trecerea liniei de
iniţializează la cea mai mică valoare (negativă) baleiaj prin proiecţia poligonului respectiv. Variabila
reprezentabilă. poate lua două valori (1 sau 0) şi se iniţializează la
4. Dacă xOyz este un triedru stâng, z-buffer-ul se valoarea care indică, prin convenţie, faptul că
iniţializează la cea mai mare valoare reprezentabilă. baleiajul nu se află ăn interiorul sau pe frontiera
5. Se iniţializează ecranul la valoarea de intensitate proiecţiei poligonului.
corespunzătoare fondului. 3. Informaţii privind textura superficială, proprietăţi de
6. Pentru fiecare faţetă poligonală: reflexie, culoare, pentru poligonul respectiv.
6.1. Se transpune prin baleiere poligonul în refresh- 4. Informaţii cu privire la iluminarea sau umbrirea
'
buffer astfel: pentru fiecare punct A (q,w) din poligonului (se iniţializează la valoarea
interiorul sau de pe frontiera poligonului: corespunzătoare fondului sau luminii ambiante şi se
6.1.1. Se calculează cota z (x,y) a punctului A completează în timpul parcurgerii algoritmului).
(x,y,z) care are pe ecran imaginea c) O listă de muchii active, în care sunt trecute muchiile
A'(q,w). Rezultă z (x,y), sau z (q,w). intersectate de linia curentă. Toate intersecţiile au
6.1.2. Se compară z (q,w) cu P (q,w) (valoarea aceeaşi ordonată, dată de linia de baleiaj curentă.
existentă în z-buffer la linia w, coloana q). Etapele principale ale algoritmului sunt:
6.1.2.1. Dacă z (q,w) > P (q,w) atunci: 1. Se creează listele a) şi b).
6.1.2.2. Înlocuieşte valoarea veche a lui P 2. Se fac ordonările necesare în aceste tabele.
(q,w) cu z (q,w). 3. Se baleiază ecranul linie cu linie
6.1.2.3. Transpune valoarea de intensitate Pentru fiecare linie:
a poligonului în punctul 3.1. Se creează lista c) pe baza listei a).
A(x,y,z) pe ecran. Se face ordonarea intersecţiilor în tabela c).
3
PROGRAMAREA CALCULATOARELOR SI LIMBAJE DE PROGRAMARE – CURS 10
Se parcurge pixel cu pixel linia curentă. Datorită complexitâţii mari a algorimilor care tratează zone
Pentru fiecare pixel: de suprafeţe strâmbe, pentru aplicaţii care nu vizează
3.1.1. Se compară abscisa curentă cu intersecţiile prelucrarea efectivă a suprafeţelor respective, se preferă
din tabelele muchiilor active. divizarea fiecărei faţete strâmbe până la atingerea unei
Dacă abscisa curentă este egală cu o intersecţie, anumite toleranţe pe fiecare subdiviziune, după care
atunci: subdiviziunile se consideră plane.
3.1.1.1. Se identifică poligonul din care se iese sau Toleranţa depinde de:
în care se intră (pe baza listelor a) şi b)).  Natura aplicaţiei
3.1.1.2. Se modifică variabilele de stare a poligo-
 Poziţia relativă între faţeta trasată şi planul ecranului
nului (dacă "1" reprezintă prezenţa
 Rezoluţia ecranului
pixelului în proiecţia poligonului, iar "0"
în afara acestuia, atunci variabila devine Astfel de algoritmi au fost elaboraţi de Carpenter, Lane şi
"1" la intersecţia liniei curente cu prima Clerk.
atură a poligonului în ordinea depărtării de O soluţie elegantă este folosirea zonelor de cuadrice pentru
lista c) şi redevine "0" la intersecţia cu descrierea suprafeţei unui corp (algoritmii Weiss, Woon,
ultima latură a aceluiaşi poligon). Mahl, Levin).
3.1.1.3. Dacă o singură variabilă de stare are
Pentru reprezentarea în 3D se poate utiliza o metodă de
valoarea "1" într-un punct, celelalte fiin
reprezentare a suprafeţelor în spaţiu folosind două familii de
"0", atunci linia de baleiaj taie în acel
curbe cubice corespunzătoare celor două direcţii într-un plan
punct proiecţia unui singur poligon, deci
xOy. Prin urmare, ecuaţia suprafeţei trebuie să se exprime în
valorile de intensitate corespunzătoare
funcţie de doi parametri s şi t, adică
acestuia se trec în ecran sau în refresh-
buffer. x =x (t,s) , y = y (t,s) , z = z (t,s) , s, t  0,1
3.1.1.4. Dacă există mai multe variabile de satre Aceste relaţii sunt ecuaţiile unei suprafeţe bicubice.
"1", înseamnă că în zona respectivă mai Pentru reprezentarea imaginii suprafeţei pe ecran s-a utilizat
multe poligoane se suprapun. forma de reprezentare Hermite: suprafaţa să treacă prin
În această situaţie, se calculează pentru patru puncte din spaţiu, corespunzătoare valorilor extreme 0
fiecare pereche de poligoane (cu ajutorul şi 1 pentru parametrii s şi t (notate cu P 00, P01, P10, P11, ) şi să
coeficienţilor ecuaţiei planului, luaţi din aibă trei tangente la suprafaţă, date în fiecare dintre aceste
lista b)) cota z corespunzătoare fiecărui puncte.
poligon în punctul a cărui proiecţie pe Forma generală a unei coordonate în funcţie de parametrii s
ecran are ordonata dată de linia curentă. şi t este:
Se trec în refresh-buffer sau pe ecran 4 8 12 16
intensităţile corespunzătoare poligonului
celui mai apropiat, până la intersecţia cu
F(s, t )   a k s 3 t 4k   s k s 2 t 8k   a k st 12k   a k t 16
k 1 k 5 k 9 k 13
următoarea muchie din lista muchiilor
Dându-se Pij, i, j 0,1, cele 4 puncte de control
active, când se refac calculele privitaore la
corespunzătoare valorilor extreme 0 şi 1 ale parametrilor s
starea baleiajului.
şi t prin care trebuie să treacă suprafaţa, adică
3.1.1.5. Dacă s-a ajuns la ultima intersecţie din
lista c), baleiajul pe linia respectivă se Pij (xij, yij, zij ) , i, j 0,1, puncte cu coordonate precizate,
consideră terminat. F F 2F
3.1.2. Se trece la linia următoare. notând cu , , derivatele de
s t st
Observaţii ordinul 1 şi 2 pentru funcţia F
Algoritmul tratează în această variantă poliedre ale căror şi cu
faţete nu se întrepătrund (sub aspectul universalităţii,
 x y z 
varianta este mai puţin puternică decât algoritmul z-buffer). Ts ij   , , 
Pentru ca algoritmul să poată trata şi poliedre care se  s s s 
întrepătrund, el trebuie modificat. O metodă ar fi
următoarea:  x y z 
Ts ij   , , 
1. Se testează mai întâi perechea de poligoane comparată,  t t t 
pentru a stabili dacă se intersectează.
2. Se stabilesc capetele segmentului de intersecţie, acestea
fiind trecute în lista c) ca o muchie fictivă.
3. Când linia de baleiaj întâlneşte o muchie fictivă, nu se  2x 2y 2z 
Tst ij   , , 
produce nici o modificare de variabilă de stare, dar se  st st st 
 
fac din nou comparaţii în adâncime.
,
Algoritmii din familia z-buffer pot trata şi suprafeţe strâmbe,
cu modificări minime. Pentru fiecare faţetă se calculează, în toate în (i,j), unde i, j 0,1, parametrii tangentelor în cele
locul coeficienţilor ecuaţiei planului, coeficienţii suprafeţei 4 puncte de control,
strâmbe (sub forma Spline, Bezier sau Hermite). unde x(s,t), y(s,t), z(s,t) sunt funcţii de forma F, se foloseşte
Profunzimea în fiecare punct al faţetei se calculează folosind algoritmul:
ecuaţia z = z (s,t). Citeşte

4
PROGRAMAREA CALCULATOARELOR SI LIMBAJE DE PROGRAMARE – CURS 10
pasul de parcurgere p,
unghiul axei Oz cu axa Ox, p,
raza r,
coordonatele celor 4 puncte de control
(xij, yij , zij) , i, j 0,1Î,
parametrii tangentelor la suprafaţă
(asij , bsij, csij )
(atij , btij, ctij )
(astij , bstij, csti j ) , i, j 0,1.
Parcurge valorile lui s între  şi 1 cu pasul p
Parcurge valorile lui t între  şi 1 cu pasul p
Calculează coordonatele x(s,t), y(s,t), z(s,t)
proiecţia punctului (x,y,z)
coordonatele punctului imagine
Trasează cele două familii de curbe.

S-ar putea să vă placă și