41
SET & AET Marian Ioan MUNTEANU Al.I.Cuza University of Iasi, Romania webpage: http://www.math.uaic.ro/munteanu 15 Noiembrie 2011 Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 1 / 18

SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

SET & AET

Marian Ioan MUNTEANU

Al.I.Cuza University of Iasi, Romaniawebpage: http://www.math.uaic.ro/∼munteanu

15 Noiembrie 2011

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 1 / 18

Page 2: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Cuprins

1 SET (sorted edges table) & AET (active edges table)Exemplu.

2 Alti algoritmi de umplere - algoritmi recursivi

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 2 / 18

Page 3: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Constructia celor doua liste.

• Se creeaza o lista de laturi, fiecare latura cu coordonatele capetelor siinversa pantei (laturile orizontale se exclud).

Ecuatia unei laturi este y = mx + n. Intrucat avem un algoritm descan-line vom avea yi+1 = yi + 1. Prin urmare, la calculul x-uluicorespunzator avem xi+1 = xi + 1/m.• Se sorteaza lista dupa coordonata y a punctelor inferioare (i.e. yminim

corespunzator unei laturi).• Pornind cu ymin, o latura devine ”ACTIVA” daca scan-line ointersecteaza. (Ea ramane activa pana cand scan-line ajunge ın punctulsuperior laturii, punct care este exclus.)• Pixelii de pe scan-line se vor aprinde dupa regula par - impar (grupandlaturile ın perechi si considerand punctele dintre capetele perechilor).• Se mareste y cu 1 si se repeta ultimii doi pasi pana cand scan-line numai intersecteaza nici o latura.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 3 / 18

Page 4: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Constructia celor doua liste.

• Se creeaza o lista de laturi, fiecare latura cu coordonatele capetelor siinversa pantei (laturile orizontale se exclud).

Ecuatia unei laturi este y = mx + n. Intrucat avem un algoritm descan-line vom avea yi+1 = yi + 1. Prin urmare, la calculul x-uluicorespunzator avem xi+1 = xi + 1/m.• Se sorteaza lista dupa coordonata y a punctelor inferioare (i.e. yminim

corespunzator unei laturi).• Pornind cu ymin, o latura devine ”ACTIVA” daca scan-line ointersecteaza. (Ea ramane activa pana cand scan-line ajunge ın punctulsuperior laturii, punct care este exclus.)• Pixelii de pe scan-line se vor aprinde dupa regula par - impar (grupandlaturile ın perechi si considerand punctele dintre capetele perechilor).• Se mareste y cu 1 si se repeta ultimii doi pasi pana cand scan-line numai intersecteaza nici o latura.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 3 / 18

Page 5: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Constructia celor doua liste.

• Se creeaza o lista de laturi, fiecare latura cu coordonatele capetelor siinversa pantei (laturile orizontale se exclud).

Ecuatia unei laturi este y = mx + n. Intrucat avem un algoritm descan-line vom avea yi+1 = yi + 1. Prin urmare, la calculul x-uluicorespunzator avem xi+1 = xi + 1/m.• Se sorteaza lista dupa coordonata y a punctelor inferioare (i.e. yminim

corespunzator unei laturi).• Pornind cu ymin, o latura devine ”ACTIVA” daca scan-line ointersecteaza. (Ea ramane activa pana cand scan-line ajunge ın punctulsuperior laturii, punct care este exclus.)• Pixelii de pe scan-line se vor aprinde dupa regula par - impar (grupandlaturile ın perechi si considerand punctele dintre capetele perechilor).• Se mareste y cu 1 si se repeta ultimii doi pasi pana cand scan-line numai intersecteaza nici o latura.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 3 / 18

Page 6: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Constructia celor doua liste.

• Se creeaza o lista de laturi, fiecare latura cu coordonatele capetelor siinversa pantei (laturile orizontale se exclud).

Ecuatia unei laturi este y = mx + n. Intrucat avem un algoritm descan-line vom avea yi+1 = yi + 1. Prin urmare, la calculul x-uluicorespunzator avem xi+1 = xi + 1/m.• Se sorteaza lista dupa coordonata y a punctelor inferioare (i.e. yminim

corespunzator unei laturi).• Pornind cu ymin, o latura devine ”ACTIVA” daca scan-line ointersecteaza. (Ea ramane activa pana cand scan-line ajunge ın punctulsuperior laturii, punct care este exclus.)• Pixelii de pe scan-line se vor aprinde dupa regula par - impar (grupandlaturile ın perechi si considerand punctele dintre capetele perechilor).• Se mareste y cu 1 si se repeta ultimii doi pasi pana cand scan-line numai intersecteaza nici o latura.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 3 / 18

Page 7: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Constructia celor doua liste.

• Se creeaza o lista de laturi, fiecare latura cu coordonatele capetelor siinversa pantei (laturile orizontale se exclud).

Ecuatia unei laturi este y = mx + n. Intrucat avem un algoritm descan-line vom avea yi+1 = yi + 1. Prin urmare, la calculul x-uluicorespunzator avem xi+1 = xi + 1/m.• Se sorteaza lista dupa coordonata y a punctelor inferioare (i.e. yminim

corespunzator unei laturi).• Pornind cu ymin, o latura devine ”ACTIVA” daca scan-line ointersecteaza. (Ea ramane activa pana cand scan-line ajunge ın punctulsuperior laturii, punct care este exclus.)• Pixelii de pe scan-line se vor aprinde dupa regula par - impar (grupandlaturile ın perechi si considerand punctele dintre capetele perechilor).• Se mareste y cu 1 si se repeta ultimii doi pasi pana cand scan-line numai intersecteaza nici o latura.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 3 / 18

Page 8: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Constructia celor doua liste.

• Se creeaza o lista de laturi, fiecare latura cu coordonatele capetelor siinversa pantei (laturile orizontale se exclud).

Ecuatia unei laturi este y = mx + n. Intrucat avem un algoritm descan-line vom avea yi+1 = yi + 1. Prin urmare, la calculul x-uluicorespunzator avem xi+1 = xi + 1/m.• Se sorteaza lista dupa coordonata y a punctelor inferioare (i.e. yminim

corespunzator unei laturi).• Pornind cu ymin, o latura devine ”ACTIVA” daca scan-line ointersecteaza. (Ea ramane activa pana cand scan-line ajunge ın punctulsuperior laturii, punct care este exclus.)• Pixelii de pe scan-line se vor aprinde dupa regula par - impar (grupandlaturile ın perechi si considerand punctele dintre capetele perechilor).• Se mareste y cu 1 si se repeta ultimii doi pasi pana cand scan-line numai intersecteaza nici o latura.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 3 / 18

Page 9: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

ET, SET, AET

ET este un array de pointeri catre o lista ınlantuita asa cum se va vedea ınexemplul descris. Are o singura linie pentru fiecare scan-line si fiecareelement al sirului pointeaza catre lista de laturi cu coordonata y minimaapartinand acelei laturi.

AET este o structura de date care consta ın toate punctele de intersectieale laturilor cu scan-line curenta. Aceste intersectii sunt sortate dupacoordonata x crescator. Aceasta permite punctelor de intersectie sa fiegrupate ın perechi pentru a fi usor folosite ın a face fill pe scan-line. Candse trece la scan-line urmatoare, AET va fi actualizata.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 4 / 18

Page 10: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

ET, SET, AET

ET este un array de pointeri catre o lista ınlantuita asa cum se va vedea ınexemplul descris. Are o singura linie pentru fiecare scan-line si fiecareelement al sirului pointeaza catre lista de laturi cu coordonata y minimaapartinand acelei laturi.

AET este o structura de date care consta ın toate punctele de intersectieale laturilor cu scan-line curenta. Aceste intersectii sunt sortate dupacoordonata x crescator. Aceasta permite punctelor de intersectie sa fiegrupate ın perechi pentru a fi usor folosite ın a face fill pe scan-line. Candse trece la scan-line urmatoare, AET va fi actualizata.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 4 / 18

Page 11: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

ET, SET, AET

Mai precis, algoritmul consta ın urmatorii pasi:

1. Se grupeaza laturile ıntr-o lista de laturi (ET) si se sorteaza aceastadupa yminim al fiecarei laturi (obtinandu-se SET - sorted edges table).2. Se initializeaza y cu ymin (prima scan-line nevida) si AET cucontinutul din SET pentru ymin. Se goleste SET pentru ymin.3. Se repeta:

√se umplu cu pixeli perechile de x din AET

√se elimina laturile ın plus (care nu mai corespund)ymax = ycurent√y++ si se recalculeaza x de intersectie

√se adauga laturi noi si se face resortare

√se goleste SET pentru ycurent

pana cand AET si SET sunt ambele vide.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 5 / 18

Page 12: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

ET, SET, AET

Mai precis, algoritmul consta ın urmatorii pasi:

1. Se grupeaza laturile ıntr-o lista de laturi (ET) si se sorteaza aceastadupa yminim al fiecarei laturi (obtinandu-se SET - sorted edges table).2. Se initializeaza y cu ymin (prima scan-line nevida) si AET cucontinutul din SET pentru ymin. Se goleste SET pentru ymin.3. Se repeta:

√se umplu cu pixeli perechile de x din AET

√se elimina laturile ın plus (care nu mai corespund)ymax = ycurent√y++ si se recalculeaza x de intersectie

√se adauga laturi noi si se face resortare

√se goleste SET pentru ycurent

pana cand AET si SET sunt ambele vide.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 5 / 18

Page 13: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

ET, SET, AET

Mai precis, algoritmul consta ın urmatorii pasi:

1. Se grupeaza laturile ıntr-o lista de laturi (ET) si se sorteaza aceastadupa yminim al fiecarei laturi (obtinandu-se SET - sorted edges table).2. Se initializeaza y cu ymin (prima scan-line nevida) si AET cucontinutul din SET pentru ymin. Se goleste SET pentru ymin.3. Se repeta:

√se umplu cu pixeli perechile de x din AET

√se elimina laturile ın plus (care nu mai corespund)ymax = ycurent√y++ si se recalculeaza x de intersectie

√se adauga laturi noi si se face resortare

√se goleste SET pentru ycurent

pana cand AET si SET sunt ambele vide.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 5 / 18

Page 14: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

ET, SET, AET

Mai precis, algoritmul consta ın urmatorii pasi:

1. Se grupeaza laturile ıntr-o lista de laturi (ET) si se sorteaza aceastadupa yminim al fiecarei laturi (obtinandu-se SET - sorted edges table).2. Se initializeaza y cu ymin (prima scan-line nevida) si AET cucontinutul din SET pentru ymin. Se goleste SET pentru ymin.3. Se repeta:

√se umplu cu pixeli perechile de x din AET

√se elimina laturile ın plus (care nu mai corespund)ymax = ycurent√y++ si se recalculeaza x de intersectie

√se adauga laturi noi si se face resortare

√se goleste SET pentru ycurent

pana cand AET si SET sunt ambele vide.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 5 / 18

Page 15: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

ET, SET, AET

Mai precis, algoritmul consta ın urmatorii pasi:

1. Se grupeaza laturile ıntr-o lista de laturi (ET) si se sorteaza aceastadupa yminim al fiecarei laturi (obtinandu-se SET - sorted edges table).2. Se initializeaza y cu ymin (prima scan-line nevida) si AET cucontinutul din SET pentru ymin. Se goleste SET pentru ymin.3. Se repeta:

√se umplu cu pixeli perechile de x din AET

√se elimina laturile ın plus (care nu mai corespund)ymax = ycurent√y++ si se recalculeaza x de intersectie

√se adauga laturi noi si se face resortare

√se goleste SET pentru ycurent

pana cand AET si SET sunt ambele vide.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 5 / 18

Page 16: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

ET, SET, AET

Mai precis, algoritmul consta ın urmatorii pasi:

1. Se grupeaza laturile ıntr-o lista de laturi (ET) si se sorteaza aceastadupa yminim al fiecarei laturi (obtinandu-se SET - sorted edges table).2. Se initializeaza y cu ymin (prima scan-line nevida) si AET cucontinutul din SET pentru ymin. Se goleste SET pentru ymin.3. Se repeta:

√se umplu cu pixeli perechile de x din AET

√se elimina laturile ın plus (care nu mai corespund)ymax = ycurent√y++ si se recalculeaza x de intersectie

√se adauga laturi noi si se face resortare

√se goleste SET pentru ycurent

pana cand AET si SET sunt ambele vide.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 5 / 18

Page 17: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

ET, SET, AET

Mai precis, algoritmul consta ın urmatorii pasi:

1. Se grupeaza laturile ıntr-o lista de laturi (ET) si se sorteaza aceastadupa yminim al fiecarei laturi (obtinandu-se SET - sorted edges table).2. Se initializeaza y cu ymin (prima scan-line nevida) si AET cucontinutul din SET pentru ymin. Se goleste SET pentru ymin.3. Se repeta:

√se umplu cu pixeli perechile de x din AET

√se elimina laturile ın plus (care nu mai corespund)ymax = ycurent√y++ si se recalculeaza x de intersectie

√se adauga laturi noi si se face resortare

√se goleste SET pentru ycurent

pana cand AET si SET sunt ambele vide.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 5 / 18

Page 18: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

ET, SET, AET

Mai precis, algoritmul consta ın urmatorii pasi:

1. Se grupeaza laturile ıntr-o lista de laturi (ET) si se sorteaza aceastadupa yminim al fiecarei laturi (obtinandu-se SET - sorted edges table).2. Se initializeaza y cu ymin (prima scan-line nevida) si AET cucontinutul din SET pentru ymin. Se goleste SET pentru ymin.3. Se repeta:

√se umplu cu pixeli perechile de x din AET

√se elimina laturile ın plus (care nu mai corespund)ymax = ycurent√y++ si se recalculeaza x de intersectie

√se adauga laturi noi si se face resortare

√se goleste SET pentru ycurent

pana cand AET si SET sunt ambele vide.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 5 / 18

Page 19: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Prezentam ın detaliu urmatorul exemplu:

Consideram poligonul ABCDEFG dat prin A(5, 2), B(10, 2), C (10, 7),D(13, 4), E (17, 13), F (7, 13) si G (2, 4).

Figura: Poligonul ABCDEFG

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 6 / 18

Page 20: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Vom scrie ın continuare laturile pentru a putea crea SET:

x1 y1 x2 y2 1/m Observatii

AB: 5 2 10 2 5 / 0 latura orizontala, nu se ia ın calcul

BC: 10 2 10 7 0 / 5

CD: 10 7 13 4 3 / -3

DE: 13 4 17 13 4 / 9

EF: 17 13 7 13 -10 / 0 latura orizontala, nu se ia ın calcul

FG: 7 13 2 4 -5 / -9

GA: 2 4 5 2 3 / -2

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 7 / 18

Page 21: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Avem

[ymin = min(yA, . . . , yG ) = 2ymax = max(yA, . . . , yG ) = 13.

Prin urmare, ın ET avem laturi doar pentru y = 2 si y = 4, si anume:

y = 2 :

ymax xinit 1 / m

BC: 7 10 0 / 5GA: 4 5 3 / -2

y = 4 :

ymax xinit 1 / m

CD: 7 13 3 / -3DE: 13 13 4 / 9FG: 13 2 -5 / -9 .

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 8 / 18

Page 22: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Acum putem construi SET:

13

12

11

10

9

8

7

6

5

4 •— —- 13 2 5/9 •– —- 7 13 3/-3 •– — 13 13 4/9 x

3

2 •— —- 4 5 3/-2 •– —- 7 10 0/-5 x

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 9 / 18

Page 23: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Vom scrie ın continuare AET pentru fiecare scan-line de la y = 2 lay = 13 si pixelii care se aprind.

y=2 4 5 3/-2 •– —- 7 10 0/-5 x

Pixelii care se aprind: 5, 6, 7, 8, 9.

y=3 4 312 3/-2 •– —- 7 10 0/-5 x

Pixelii care se aprind: 4, 5, 6, 7, 8, 9.

y=4 Inserez cele doua laturi de mai sus ın lista corespunzatoare din SETsi elimin latura GA pentru ca are prima componenta 4 (am ajuns ınpunctul G ). Obtin:

13 2 5/9 •- – 7 10 0/-5 •- – 7 13 3/-3 •- – 13 13 4/9 x

Pixelii aprinsi: 2, 3, 4, 5, 6, 7, 8, 9, si 13.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 10 / 18

Page 24: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Vom scrie ın continuare AET pentru fiecare scan-line de la y = 2 lay = 13 si pixelii care se aprind.

y=2 4 5 3/-2 •– —- 7 10 0/-5 x

Pixelii care se aprind: 5, 6, 7, 8, 9.

y=3 4 312 3/-2 •– —- 7 10 0/-5 x

Pixelii care se aprind: 4, 5, 6, 7, 8, 9.

y=4 Inserez cele doua laturi de mai sus ın lista corespunzatoare din SETsi elimin latura GA pentru ca are prima componenta 4 (am ajuns ınpunctul G ). Obtin:

13 2 5/9 •- – 7 10 0/-5 •- – 7 13 3/-3 •- – 13 13 4/9 x

Pixelii aprinsi: 2, 3, 4, 5, 6, 7, 8, 9, si 13.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 10 / 18

Page 25: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Vom scrie ın continuare AET pentru fiecare scan-line de la y = 2 lay = 13 si pixelii care se aprind.

y=2 4 5 3/-2 •– —- 7 10 0/-5 x

Pixelii care se aprind: 5, 6, 7, 8, 9.

y=3 4 312 3/-2 •– —- 7 10 0/-5 x

Pixelii care se aprind: 4, 5, 6, 7, 8, 9.

y=4 Inserez cele doua laturi de mai sus ın lista corespunzatoare din SETsi elimin latura GA pentru ca are prima componenta 4 (am ajuns ınpunctul G ). Obtin:

13 2 5/9 •- – 7 10 0/-5 •- – 7 13 3/-3 •- – 13 13 4/9 x

Pixelii aprinsi: 2, 3, 4, 5, 6, 7, 8, 9, si 13.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 10 / 18

Page 26: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Vom scrie ın continuare AET pentru fiecare scan-line de la y = 2 lay = 13 si pixelii care se aprind.

y=2 4 5 3/-2 •– —- 7 10 0/-5 x

Pixelii care se aprind: 5, 6, 7, 8, 9.

y=3 4 312 3/-2 •– —- 7 10 0/-5 x

Pixelii care se aprind: 4, 5, 6, 7, 8, 9.

y=4 Inserez cele doua laturi de mai sus ın lista corespunzatoare din SETsi elimin latura GA pentru ca are prima componenta 4 (am ajuns ınpunctul G ). Obtin:

13 2 5/9 •- – 7 10 0/-5 •- – 7 13 3/-3 •- – 13 13 4/9 x

Pixelii aprinsi: 2, 3, 4, 5, 6, 7, 8, 9, si 13.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 10 / 18

Page 27: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

y=5

13 2 59

5/9 •- - 7 10 0/-5 •- - 7 12 3/-3 •- - 13 13 49

4/9 x

Pixelii care se aprind: 3, 4, 5, 6, 7, 8, 9, 12, 13.

y=6

13 3 19

5/9 •- – 7 10 0/-5 •- – 7 11 3/-3 •- – 13 13 89

4/9 x

Pixelii care se aprind: 4, 5, 6, 7, 8, 9, 11, 12, 13.

y=7 Am ajuns ın C , care este maxim pentru doua laturi, BC si CD,(deci nu apartine acestora) si prin urmare elimin laturile.

AET: 13 369 5/9 •- —- 13 143

9 4/9 x

Pixelii care se aprind: 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14. (Saobservam ca punctul (10, 7) este varf superior pentru un poligon adiacentpoligonului dat care are BC si CD drept laturi, deci nu apartine acestuia,prin urmare apartine poligonului dat.)

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 11 / 18

Page 28: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

y=5

13 2 59

5/9 •- - 7 10 0/-5 •- - 7 12 3/-3 •- - 13 13 49

4/9 x

Pixelii care se aprind: 3, 4, 5, 6, 7, 8, 9, 12, 13.

y=6

13 3 19

5/9 •- – 7 10 0/-5 •- – 7 11 3/-3 •- – 13 13 89

4/9 x

Pixelii care se aprind: 4, 5, 6, 7, 8, 9, 11, 12, 13.

y=7 Am ajuns ın C , care este maxim pentru doua laturi, BC si CD,(deci nu apartine acestora) si prin urmare elimin laturile.

AET: 13 369 5/9 •- —- 13 143

9 4/9 x

Pixelii care se aprind: 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14. (Saobservam ca punctul (10, 7) este varf superior pentru un poligon adiacentpoligonului dat care are BC si CD drept laturi, deci nu apartine acestuia,prin urmare apartine poligonului dat.)

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 11 / 18

Page 29: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

y=5

13 2 59

5/9 •- - 7 10 0/-5 •- - 7 12 3/-3 •- - 13 13 49

4/9 x

Pixelii care se aprind: 3, 4, 5, 6, 7, 8, 9, 12, 13.

y=6

13 3 19

5/9 •- – 7 10 0/-5 •- – 7 11 3/-3 •- – 13 13 89

4/9 x

Pixelii care se aprind: 4, 5, 6, 7, 8, 9, 11, 12, 13.

y=7 Am ajuns ın C , care este maxim pentru doua laturi, BC si CD,(deci nu apartine acestora) si prin urmare elimin laturile.

AET: 13 369 5/9 •- —- 13 143

9 4/9 x

Pixelii care se aprind: 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14. (Saobservam ca punctul (10, 7) este varf superior pentru un poligon adiacentpoligonului dat care are BC si CD drept laturi, deci nu apartine acestuia,prin urmare apartine poligonului dat.)

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 11 / 18

Page 30: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

y=8 13 4 29 5/9 •- —- 13 14 7

9 4/9 x

Pixelii care se aprind: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14.

y=9 13 4 79 5/9 •- —- 13 15 2

9 4/9 x

Pixelii care se aprind: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

y=10 13 5 39 5/9 •- —- 13 15 6

9 4/9 x

Pixelii care se aprind: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

y=11 13 5 89 5/9 •- —- 13 16 1

9 4/9 x

Pixelii care se aprind: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.

y=12 13 6 49 5/9 •- —- 13 16 5

9 4/9 x

Pixelii care se aprind: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.

y=13 13 7 5/9 •- —- 13 17 4/9 x

Nu se aprinde nici un pixel (latura orizontala superioara). Se elimina cele doualaturi (prima componenta pentru fiecare este 13).

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 12 / 18

Page 31: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

y=8 13 4 29 5/9 •- —- 13 14 7

9 4/9 x

Pixelii care se aprind: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14.

y=9 13 4 79 5/9 •- —- 13 15 2

9 4/9 x

Pixelii care se aprind: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

y=10 13 5 39 5/9 •- —- 13 15 6

9 4/9 x

Pixelii care se aprind: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

y=11 13 5 89 5/9 •- —- 13 16 1

9 4/9 x

Pixelii care se aprind: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.

y=12 13 6 49 5/9 •- —- 13 16 5

9 4/9 x

Pixelii care se aprind: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.

y=13 13 7 5/9 •- —- 13 17 4/9 x

Nu se aprinde nici un pixel (latura orizontala superioara). Se elimina cele doualaturi (prima componenta pentru fiecare este 13).

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 12 / 18

Page 32: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

y=8 13 4 29 5/9 •- —- 13 14 7

9 4/9 x

Pixelii care se aprind: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14.

y=9 13 4 79 5/9 •- —- 13 15 2

9 4/9 x

Pixelii care se aprind: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

y=10 13 5 39 5/9 •- —- 13 15 6

9 4/9 x

Pixelii care se aprind: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

y=11 13 5 89 5/9 •- —- 13 16 1

9 4/9 x

Pixelii care se aprind: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.

y=12 13 6 49 5/9 •- —- 13 16 5

9 4/9 x

Pixelii care se aprind: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.

y=13 13 7 5/9 •- —- 13 17 4/9 x

Nu se aprinde nici un pixel (latura orizontala superioara). Se elimina cele doualaturi (prima componenta pentru fiecare este 13).

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 12 / 18

Page 33: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

y=8 13 4 29 5/9 •- —- 13 14 7

9 4/9 x

Pixelii care se aprind: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14.

y=9 13 4 79 5/9 •- —- 13 15 2

9 4/9 x

Pixelii care se aprind: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

y=10 13 5 39 5/9 •- —- 13 15 6

9 4/9 x

Pixelii care se aprind: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

y=11 13 5 89 5/9 •- —- 13 16 1

9 4/9 x

Pixelii care se aprind: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.

y=12 13 6 49 5/9 •- —- 13 16 5

9 4/9 x

Pixelii care se aprind: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.

y=13 13 7 5/9 •- —- 13 17 4/9 x

Nu se aprinde nici un pixel (latura orizontala superioara). Se elimina cele doualaturi (prima componenta pentru fiecare este 13).

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 12 / 18

Page 34: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

y=8 13 4 29 5/9 •- —- 13 14 7

9 4/9 x

Pixelii care se aprind: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14.

y=9 13 4 79 5/9 •- —- 13 15 2

9 4/9 x

Pixelii care se aprind: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

y=10 13 5 39 5/9 •- —- 13 15 6

9 4/9 x

Pixelii care se aprind: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

y=11 13 5 89 5/9 •- —- 13 16 1

9 4/9 x

Pixelii care se aprind: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.

y=12 13 6 49 5/9 •- —- 13 16 5

9 4/9 x

Pixelii care se aprind: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.

y=13 13 7 5/9 •- —- 13 17 4/9 x

Nu se aprinde nici un pixel (latura orizontala superioara). Se elimina cele doualaturi (prima componenta pentru fiecare este 13).

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 12 / 18

Page 35: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

y=8 13 4 29 5/9 •- —- 13 14 7

9 4/9 x

Pixelii care se aprind: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14.

y=9 13 4 79 5/9 •- —- 13 15 2

9 4/9 x

Pixelii care se aprind: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

y=10 13 5 39 5/9 •- —- 13 15 6

9 4/9 x

Pixelii care se aprind: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

y=11 13 5 89 5/9 •- —- 13 16 1

9 4/9 x

Pixelii care se aprind: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.

y=12 13 6 49 5/9 •- —- 13 16 5

9 4/9 x

Pixelii care se aprind: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16.

y=13 13 7 5/9 •- —- 13 17 4/9 x

Nu se aprinde nici un pixel (latura orizontala superioara). Se elimina cele doualaturi (prima componenta pentru fiecare este 13).

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 12 / 18

Page 36: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Prin urmare, rezultatul va fi urmatorul:

Figura: Filling utilizand scan-line

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 13 / 18

Page 37: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Algoritmi recursivi

In cazul ın care poligonul este deja trasat se pot utiliza tehnici recursive deumplere. Se presupune ca se cunoaste un punct din interiorulpoligonului. Daca este aprins atunci este pe o latura a poligonului. Seaplica tehnica odd parity pentru depistarea unui punct din interior care nueste pe nici o latura a poligonului. Astfel vom gasi un punct neaprins ıninteriorul poligonului. Se aprinde si se continua algoritmul cu cei patru(sau opt) pixeli vecini. Cand pixelul curent este aprins se renunta la apelulrecursiv. Anumiti pixeli vor fi vizitati ınsa de mai multe ori.

Algoritmii care ”umplu” regiunile definite relativ la interior sunt numitialgoritmi flood-fill, iar cei pentru regiunile definite prin frontiera se numescalgoritmi boundary-fill.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 14 / 18

Page 38: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Algoritmi recursivi

ALGORITM FLOOD FILL

void flood fill 4( /*cu patru pixeli vecini*/int x, int y, /*punctul de start*/int valold, int valnew);

/*valorile culorii pentru interior si pentru inlocuire*/{

if (getpixel(x,y)==valold){

putpixel(x, y, valnew);flood fill 4(x, y-1, valold, valnew);flood fill 4(x, y+1, valold, valnew);flood fill 4(x+1, y, valold, valnew);flood fill 4(x-1, y, valold, valnew);

}}

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 15 / 18

Page 39: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Algoritmi recursivi

ALGORITM BOUNDARY FILL CU 4 PIXELI

void boundary fill 4(int x, int y, int c int,int c bound){

int culoare;culoare = getpixel(x, y);if ((culoare != c bound) && (culoare != c int)){

putpixel(x, y, c int);boundary fill 4 (x+1, y, c int, c bound);boundary fill 4 (x-1, y, c int, c bound);boundary fill 4 (x, y+1, c int, c bound);boundary fill 4 (x, y-1, c int, c bound);} // end if

} // end functie

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 16 / 18

Page 40: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Algoritmi recursivi

ALGORITM BOUNDARY FILL CU 8 PIXELI

void boundary fill 8(int x, int y, int c int,int c bound){ int culoare;

culoare = getpixel(x, y);if ((culoare != c bound) && (culoare != c int)){ putpixel(x, y, c int);

boundary fill 8 (x+1, y+1, c int, c bound);boundary fill 8 (x+1, y, c int, c bound);boundary fill 8 (x+1, y-1, c int, c bound);boundary fill 8 (x, y+1, c int, c bound);boundary fill 8 (x, y-1, c int, c bound);boundary fill 8 (x-1, y+1, c int, c bound);boundary fill 8 (x-1, y, c int, c bound);boundary fill 8 (x-1, y-1, c int, c bound);} // end if } // end functie

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 17 / 18

Page 41: SET & AETmunteanu/cursuri/Curs_07_an3.pdf · 2011-11-15 · 1 SET (sorted edges table) & AET (active edges table) Exemplu. 2 Alt˘i algoritmi de umplere - algoritmi recursivi Marian

Observatie. Datorita discretizarii, frontiera nu este ”continua” si potaparea probleme la executie (ın sensul ca ın anumite situatii pot fi alesipixeli exteriori poligonului).

Observatie. Pentru suprafete mari pot interveni probleme de memorie,numarul mare de proceduri neterminate poate necesita o stiva dedimensiuni foarte mare.

Marian Ioan MUNTEANU (UAIC) Filling 15 Noiembrie 2011 18 / 18