Conversão por Varrimento - Universidade de...

45
Conversão por Varrimento

Transcript of Conversão por Varrimento - Universidade de...

Page 1: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por Varrimento

Page 2: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão vectorial ? matricial

Representação Vectorial

Representação Matricial

2

Page 3: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Rasterização de Primitivas? Rasterização - converter de uma definição

geométrica para pixels (matricial)? Rasterizar ≡ escolher pixels

Operação muito frequente? Operação muito frequente? Deve ser eficiente!!!

? Isto implica:? Utilizar aritmética de inteiros? Utilizar métodos incrementais? Utilizar somas no lugar de multiplicações

3

Page 4: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do ponto

? A conversão por varrimento do ponto envolve a iluminação do pixel que o contémcontém? Ex. Os pontos em coordenadas

P1(2.5, 1.2) e P2(2.8, 1.5) seriam ambos representados pelo pixel (2,1)

? Em geral P(x, y) ? P(int(x), int(y))

4

Page 5: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? O problemaO problema

5

Page 6: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? O problemaO problema

6

Page 7: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? Método do DecliveMétodo do Declive(Direct Scan Conversion)

? Um segmento de recta pode ser definido por dois

(x2,y2)

y=mx+b

b (x1,y1)

Um segmento de recta pode ser definido por dois pontos extremos e uma equação:

? Pontos ? (x1, y1) e (x2, y2)

? Equação ? y = m*x + b (1)? onde m = ∆∆∆∆y/∆∆∆∆x,? b = ao valor que y toma quando a recta intersecta o eixo do

y. O valor de b pode ser calculado por b = y1 – m*x1

Podemos determinar os valores de y incrementando o valor de x de x1 a x2

7

Page 8: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? Método do DecliveMétodo do Declive ((versão versão 0< m <10< m <1)*)*void Line1(int x1, int y1, int x2, int y2, int color){

float m = (y2-y1)/(x2-x1);float b = y1 - m*x1;float y;int x;

* Se m > 1, inverte-se x e y.

int x;

PutPixel(x1,y1,color);

for (x=x1+1; x<=x2; x++){

y = m*x + b;PutPixel(x,ROUND(y), color);

}}

(x1,y1)

(x2,y2)

y=mx+bb

(3,2)

(9,4)

y=(1/3)x+11

3

(3,2)

4

(4,2.33)

5

2 (4,2)

(5,3)

(5,2.66)

32

Exemplo

Calcula-se m e b 1a iteração 2a iteração 3a iteração 8

Page 9: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? Método do Declive (cont...)Método do Declive (cont...)Problemas:

? Segmentos de recta verticais.? 2 operações de ponto flutuante por pixel

Por que trabalhar em float se os pixels são inteiros???? Por que trabalhar em float se os pixels são inteiros???

void Line1(int x1, int y1, int x2, int y2, int color){

float m = (y2-y1)/(x2-x1);float b = y1 - m*x1;float y;int x;

PutPixel(x1,y1,color);

for (x=x1+1; x<=x2; x++){

y = m*x + b;PutPixel(x,ROUND(y), color);

}} 9

Page 10: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? Simple DDA Simple DDA ((Digital Differential Analyzer)Digital Differential Analyzer)? Este algoritmo utiliza o seguinte igualdade:

m*(x+1) + b = (m*x +b) + m = y + m

Então se 0 < m < 1 então podemos considerar que? Então se 0 < m < 1 então podemos considerar que∆x=1 e

xk+1 = xk +1; yk+1 = yk + m (2)? Para segmentos com m > 1 devemos inverter os

valores de x e y. Neste caso podemos assumir que∆y=1 e então da equação ∆x=∆y/m obtemos que∆x=1/m e finalmente podemos calcular

yk+1 = yk +1; xk+1 = xk + 1/m (3)10

Page 11: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? Simple DDA Simple DDA ((Digital Differential Analyzer)Digital Differential Analyzer)? As equações

xk+1 = xk +1; yk+1 = yk + m (2)y = y +1; x = x + 1/m (3)yk+1 = yk +1; xk+1 = xk + 1/m (3)

são válidas se consideramos que os segmentos são processados deesquerda a direita.

? Em caso contrário vamos ter que ∆∆∆∆x= -1 pelo que

xk+1 = xk - 1; yk+1 = yk - m (4)Ou para o caso que m>1 então temos que ∆∆∆∆y= -1 e

yk+1 = yk - 1; xk+1 = xk - 1/m (5)? Estas equações podem ser utilizadas também para calcular a

posição dos pixels de segmentos com m<0 (Exercício) 11

Page 12: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? Simple DDA Simple DDA ((versão versão 0< m <10< m <1))void LineDDA(int x1, int y1, int x2, int y2, int color){

float y; float m = (y2-y1)/(x2-x1);int x;

? Problemas:? Aproximações “muito grosseiras” de y

12

int x;

PutPixel(x1,y1, color);y = y1;

for (x=x1+1; x<=x2; x++){

y += m;PutPixel(x,ROUND(y), color);

}}

Page 13: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? Simple DDA (cont...)Simple DDA (cont...)Observações:

? O número total de pixels desenhados pelo método DDA é iguala max(∆∆∆∆x, ∆∆∆∆y)Para segmentos (S) horizontais/verticais o max(∆∆∆∆x, ∆∆∆∆y) =? Para segmentos (S) horizontais/verticais o max(∆∆∆∆x, ∆∆∆∆y) =Length(S) – ideal!!!

? Para segmentos oblíquos com ângulo de inclinação de 450

então:Length(S) = Sqrt(∆x2+∆y2) = Sqrt(2*∆x2) =

= Sqrt(2)*∆x ≈ 1,41*dx∆∆∆∆x = 0,71* Length (S)

???? O segmento S só tem um 71% dos pontos!!!

13

Page 14: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? O Algoritmo de BresenhamO Algoritmo de Bresenham(Bresenham, J.E. Algorithm for computer control of a digitalplotter, IBM Systems Journal, January 1965, pp. 25-30.)

? É um algoritmo eficiente já que apenasrecorre a adições e subtracções inteirasÉ um algoritmo eficiente já que apenasrecorre a adições e subtracções inteirase multiplicações por 2.

? Ideia fundamental:A melhor aproximação ao segmento de

recta verdadeiro é dada pelos pixels doraster a menor distância do segmentode recta verdadeiro

14

Page 15: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? O Algoritmo de BresenhamO Algoritmo de Bresenham? Em vez de computar o valor do

próximo y em ponto flutuante, oproblema fica reduzido a decidir

(x + 1, y + 1)

problema fica reduzido a decidirse o próximo pixel vai tercoordenadas(x + 1, y) ou (x + 1, y + 1)

? Esta decisão requer que seavalie se a linha passa acima ouabaixo do ponto médio

(x + 1, y)(x, y)

(x + 1, y + ½)

15

Page 16: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? O Algoritmo de BresenhamO Algoritmo de Bresenham? Variável de decisão V é dada pela classificação do ponto

médio com relação ao semi-espaço definido pela recta V? Caso 1: Linha passou abaixo do ponto médio? Caso 1: Linha passou abaixo do ponto médio

(x,y) (x+1,y)

(x+1,y+1)

(x+1,y+½)

a+V=V

c+)+b(y+ax=V

c+)+b(y+)+a(x=V

y)(x,>V

y)(x,<V

y)(x,=V

V=c+by+ax

01∴

12

121

recta da acima 0

recta da abaixo 0

recta a sobre 0 onde

0

1

(x,y+½) V1

V0

(x,y+1)

16

Page 17: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? O Algoritmo de BresenhamO Algoritmo de Bresenham? Caso 2: Linha passou acima do ponto médio

(x+1,y+2)

(x,y)

(x+1,y+1)

(x+1,y+ 1+ ½)

(x,y+½)

V1

V0

(x,y+1)

V 1= a ( x+1)+b( y+1+ 12 )+c

V 0= ax+b ( y+12 )+c

∴V 1= V 0+a +b

17

Page 18: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? O Algoritmo de BresenhamO Algoritmo de Bresenham? Coeficientes da recta

a = y2 – y1

b = x1 – x2

c = x2 y1 – x1 y2c = x2 y1 – x1 y2

? Para iniciar o algoritmo, precisamos saber o valor de V em (x1+ 1, y1 + ½)

V = a (x1 + 1) + b (y1 + ½) + c= a x1 + b y1 + c + a + b/2 = a + b/2

como a x1 + b y1 + c = 0 então temos que V = a + b/2

? Podemos evitar a divisão por 2 multiplicando a, b e c por 2 (não altera a equação da recta)

18

Page 19: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? O Algoritmo de Bresenham (0 a 45º)O Algoritmo de Bresenham (0 a 45º)a ← y2 – y1

b ← x1 – x2

V ← 2 * a + bx ← xx ← x1

y ← y1

Enquanto x ≤ x2 fazer:Pintar pixel (x, y)x ← x + 1Se V ≤ 0

Então V ← V + 2 * a Senão V ← V + 2 * (a + b) ; y ← y + 1

19

Page 20: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? O Algoritmo de Bresenham O Algoritmo de Bresenham

? Outra versão deste algoritmo pode ser encontrada em:em:

http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html

http://www.gocad.org/~caumon/Teach/CG/bresenham.pdf

20

Page 21: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? O Algoritmo de Bresenham O Algoritmo de Bresenham Extensão (∀∀∀∀ ângulo de inclinação)? Ver no documento AlgBre.zip (nos sumários práticos

da disciplina)da disciplina)

21

Page 22: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento do segmento de recta

?? O Algoritmo de Bresenham O Algoritmo de Bresenham

Implementação Javahttp://www.cs.unc.edu/~mcmillan/comp136/Lecture6/Lines.html

Applethttp://www.cs.technion.ac.il/~cs234325/Applets/applets/bresenham/GermanApplet.html

22

Page 23: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da circunferência

? Uma circunferência é uma figurasimétrica!

? Qualquer algoritmo por varrimento da? Qualquer algoritmo por varrimento dacircunferência pode tirar partido destasimetria para desenhar oito pontos apartir de cada valor que o algoritmocalcula.

23

Page 24: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da circunferência

?? Exemplo: Simetria a 4 eixosExemplo: Simetria a 4 eixos

24

Page 25: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da circunferência

?? MétodoMétodo PolinomialPolinomial?? UmaUma circunferênciacircunferência podepode serser definidadefinida pelapela

seguinteseguinte equaçãoequação polinomialpolinomial::yy22 == rr22 –– xx22 ,,ondeonde rr –– raioraio dada circunferênciacircunferênciaondeonde rr –– raioraio dada circunferênciacircunferência

?? EntãoEntão cadacada coordenadacoordenada x,x, nono sectorsector quequevaivai dede 9090ºº aa 4545ºº éé determinadadeterminada porporsucessivossucessivos incrementosincrementos dede xx dede 00 aaeecadacada coordenadacoordenada yy éé calculadacalculada porpor

?? ObservaçãoObservação:: esteeste métodométodo temtem operaçõesoperaçõesaritméticasaritméticas muitomuito custosascustosas parapara oocomputadorcomputador ?? éé muitomuito poucopouco eficiente!!!eficiente!!!

22 xr −)2(2/ 22222 rxyrxr =⇒−=

25

Page 26: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da circunferência

?? MétodoMétodo PolinomialPolinomialOrganigrama:

1. Inicializar: r - raio, (h, k) – centro da circunferência: (x, y) = (0,0); i = incremento; xfim = r/sqrt(2);(x, y) = (0,0); i = incremento; xfim = r/sqrt(2);

2. Testar se a circunferência foi gerada totalmente: 2. Testar se a circunferência foi gerada totalmente: se x > xfim, se x > xfim, STOPSTOP

3. Calcular o valor de y: y = sqrt(ry = sqrt(r22--xx22))

4. Desenhar os pontos da simetria: (x+h, y+k); ((x+h, y+k); (--x+h, x+h, --y+k); y+k); (y+h, x+k); ((y+h, x+k); (--y+h, y+h, --x+k); x+k); ((--y+h, x+k); (y+h, y+h, x+k); (y+h, --x+k); x+k); ((--x+h, y+k); (x+h, x+h, y+k); (x+h, --y+k) y+k)

5. Incrementar x: x = x+ix = x+i

6. Continuar no passo 2 26

Page 27: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da circunferência

? Método TrigonométricoUma circunferência pode ser definidamediante a utilização de funçõestrigonométricas:

x = r*cos(θθθθ); y = r*sen(θθθθ)x = r*cos(θθθθ); y = r*sen(θθθθ)onde θθθθ – ângulo corrente

r – raio da circunferência

Com este método, θθθθ é sucessivamenteincrementado de 0 a ππππ/4 e cada valor dex e y é calculado

Este método tem operações aritméticasainda mais custosas que o métodopolinomial ? é muito pouco eficiente!!!

27

Page 28: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da circunferência

? Método TrigonométricoOrganigrama:1. Inicializar r - raio, (h, k) – centro da circunferência:

(x,y) = (0,0), i = incremento, (x,y) = (0,0), i = incremento, θθfimfim= (22/7)/4 (== (22/7)/4 (=ππ/4=45º); /4=45º); θθ=0=02. Testar se a circunferência foi gerada totalmente: 2. Testar se a circunferência foi gerada totalmente:

se se θθ > > θθfimfim, , STOPSTOP3. Calcular os valores de x e y:

x = r*cos(x = r*cos(θθ); y = r*sen(); y = r*sen(θθ))4. Desenhar os pontos da simetria:

(x+h, y+k); ((x+h, y+k); (--x+h, x+h, --y+k); y+k); (y+h, x+k); ((y+h, x+k); (--y+h, y+h, --x+k); x+k); ((--y+h, x+k); (y+h, y+h, x+k); (y+h, --x+k);x+k);((--x+h, y+k); (x+h, x+h, y+k); (x+h, --y+k) y+k)

5. Incrementar θ: θθ = = θθ + i+ i

6. Continuar no passo 2 28

Page 29: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da circunferência

? Observações gerais:? Para traçar eficientemente uma circunferência deve

ser evitada a utilização de funções trigonométricase funções de potências.e funções de potências.

? Para encontrar os pontos de conversão porvarrimento da circunferência é desejável efectuarapenas cálculos de adição e subtracções inteiras,assim como multiplicações por potências de 2.

? O algoritmo de BresenhamBresenham permite que tal sejaconseguido!!!

29

Page 30: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da circunferência

? Algoritmo de Bresenham para a circunferência? Se é usada a simetria em

relação a quatro eixos, apenasrelação a quatro eixos, apenastemos de gerar os pontos numsector angular de 45º

? Se os pontos forem gerados de90º a 45º, apenas serão feitosmovimentos nas direcções de+x e –y

30

Page 31: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da circunferência

? Algoritmo de Bresenham para a Circunferência (cont...)? Ideia básica

A melhor aproximação àA melhor aproximação àcircunferência verdadeira serádefinida por aqueles pixelsque estão a menor distânciada circunferência verdadeira.

31

Page 32: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da circunferência

? Algoritmo de Bresenham para a Circunferência (cont...)? Note que se os pontos são gerados de

90º a 45º, podemos determinar cada90º a 45º, podemos determinar cadanovo tomando uma das seguintesacções:

? Mover uma unidade da direcção +x? Mover uma unidade na direcção +x

e uma na direcção -y? É preciso um método (eficiente) para

decidir entre essas duas alternativas!!!

32

Page 33: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da circunferência

?? Algoritmo de Bresenham para a circunferência Algoritmo de Bresenham para a circunferência Sejam:

Relativamente ao pixel P3:

Relativamente ao ponto P

221

21 )1()( ryxSD iii −++= −−

P(xi-1,yi-1)

Relativamente ao ponto P2

Por definição D(Si)>0 e D(Ti)≤0Seja di = D(Si) + D(Ti)Então

A partir dessa equação e sabendo que (x0,y0)é (0,r) podemos obter que:

d1= 3 - 2*r

221

21 )1()1()( ryxTD iii −−++= −−

221

21

221

21 )1()1()1( ryxryxd iiiii −−+++−++= −−−−

33

Page 34: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da circunferência

?? Algoritmo de Bresenham para a circunferência Algoritmo de Bresenham para a circunferência

Se di então sabemos quexi+1 = xi + 1; yi+1 = yi

P(xi-1,yi-1)

xi+1 = xi + 1; yi+1 = yiUtilizando a recorrência di (Exercício) podemosdeterminar quedi+1 = di + 4xi + 6

Se di

≤ 0

então sabemos quexi+1 = xi + 1; yi+1 = yi -1Utilizando a recorrência di (Exercício) podemosdeterminar quedi+1 = di + 4(xi – yi)+ 10

34

> 0

Page 35: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da circunferência

?? AlgoritmoAlgoritmo dede BresenhamBresenham parapara aa circunferênciacircunferênciaOrganigrama:1. Inicializar r 1. Inicializar r -- raio, (h, k) raio, (h, k) –– centro da circunferência:centro da circunferência:

x = 0; y = raio da circunferência; d = 3x = 0; y = raio da circunferência; d = 3--2*r;2*r;2. Testar se a circunferência foi gerada totalmente: 2. Testar se a circunferência foi gerada totalmente: 2. Testar se a circunferência foi gerada totalmente: 2. Testar se a circunferência foi gerada totalmente:

se x > y, se x > y, STOPSTOP3. Calcular a localização do próximo pixel: 3. Calcular a localização do próximo pixel:

Se d<0 ? d = d+4*x+6; x = x+1; Se d≥0 ? d = d+4*(x-y)+10; x = x+1; y = y-1;

4. Desenhar os pontos da simetria: 4. Desenhar os pontos da simetria: (x+h, y+k); ((x+h, y+k); (--x+h, x+h, --y+k); y+k); (y+h, x+k); ((y+h, x+k); (--y+h, y+h, --x+k); x+k); ((--y+h, x+k); (y+h, y+h, x+k); (y+h, --x+k); x+k); ((--x+h, y+k); (x+h, x+h, y+k); (x+h, --y+k) y+k)

5. Continuar no passo 25. Continuar no passo 2 35

Page 36: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da elipse?? Definição polinomial da elipseDefinição polinomial da elipse

? A elipse apresenta, tal como acircunferência simetrias.

? As simetrias da elipse são em relaçãoa dois eixos em vez de a quatroa dois eixos em vez de a quatroeixos.

? Definição Polinomial:

? onde? (h, k) – centro da elipse;? a – cumprimento do eixo maior? b – cumprimento do eixo menor

1)()(

2

2

2

2

=−+−b

kya

hxNeste método:Neste método:x varia de h até a;x varia de h até a;o valor de y é determinado o valor de y é determinado por:por:

ka

hxby +−−= 2

2

1

36

Page 37: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da elipse?? Definição polinomial da elipseDefinição polinomial da elipse

Organigrama:1. Inicializar a – cumprimento do eixo maior, b – cumprimento do eixo

menor, (h, k) – centro da elipse:x = 0; i = incremento; xfim = a;x = 0; i = incremento; xfim = a;x = 0; i = incremento; xfim = a;x = 0; i = incremento; xfim = a;

2. Testar se a elipse foi gerada totalmente: se x > xfim, se x > xfim, STOPSTOP3. Calcular o valor de y:

4. Desenhar os pontos da simetria: (x+h, y+k); ((x+h, y+k); (--x+h, x+h, --y+k);y+k);((--x+h, y+k); (x+h, x+h, y+k); (x+h, --y+k) y+k)

5. Incrementar x: x = x + ix = x + i

6. Continuar no passo 2

2

2

1ax

by −=

37

Page 38: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da elipse?? Definição trigonométrica da elipseDefinição trigonométrica da elipse

? Uma elipse pode ser definida mediante autilização de funções trigonométricas:

x = a*cos(θ)+h ; y = b*sen(θ)+k ,ondeθ – ângulo correntea – cumprimento do eixo maiorb – cumprimento do eixo menor(h, k) – centro da elipse

? Com este método, θ é sucessivamenteincrementado de 0 a π/2 e cada valor de xe y é calculado utilizando a definiçãotrigonométrica

38

Page 39: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento da elipse?? Definição trigonométrica da elipseDefinição trigonométrica da elipse

Organigrama:Organigrama:1. Inicializar a 1. Inicializar a –– cumprimento do eixo maior, b cumprimento do eixo maior, b –– cumprimento do cumprimento do

eixo menor, (h, k) eixo menor, (h, k) –– centro da elipse: centro da elipse: i = incremento, i = incremento, θθfimfim= (11/7) (== (11/7) (=ππ/2=90º); /2=90º); θθ = 0= 0fimfim

2.Testar se a elipse foi gerada totalmente: 2.Testar se a elipse foi gerada totalmente: se se θθ > > θθfimfim, STOP, STOP3. Calcular os valores:3. Calcular os valores:x = a*cos(x = a*cos(θθ); y = b*sen(); y = b*sen(θθ))4. Desenhar os pontos da simetria: 4. Desenhar os pontos da simetria: (x+h, y+k); ((x+h, y+k); (--x+h, x+h, --y+k); y+k);

((--x+h, y+k); (x+h, x+h, y+k); (x+h, --y+k) y+k) 5. Incrementar 5. Incrementar θθ::θθ = = θθ +i+i6. Continuar no passo 26. Continuar no passo 2

39

Page 40: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento de arcos

?? ArcosArcos? Um arco pode ser gerado quer usando o

método polinomial que o trigonométrico.? Quando é utilizado o método trigonométrico –? Quando é utilizado o método trigonométrico –

? O valor inicial θ e igual a θ1 e o valor final θ2

? Os restantes passos são semelhantes aos usadospara a conversão por varrimento da circunferência.

? Quando é utilizado o método polinomial –? O valor de x varia entre x1 e x2

? Os valores de y são calculados pela expressão:22 xr −

40

Page 41: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Conversão por varrimento de arcos?? ArcosArcos

Organigrama (Método Trigonométrico)1. Inicializar a – eixo maior, b – cumprimento do eixo menor,

(h, k) – centro do arco:i = incremento, i = incremento, θθ -- ângulo inicial, ângulo inicial, θθ –– ângulo finalângulo finali = incremento, i = incremento, θθ -- ângulo inicial, ângulo inicial, θθ1 1 –– ângulo finalângulo final

2. Testar se o arco foi gerado totalmente: se se θθ > > θθ11, , STOPSTOP

3. Calcular os valores:x = a*cos(x = a*cos(θθ)+h; y = b*sen()+h; y = b*sen(θθ)+k)+k4. Desenhar um ponto nas coordenadas (x,y) 5. Incrementar θ:

θθ = = θθ + i+ i1. Continuar no passo 2Nota: arco circular a = b = raio da circunferência 41

Page 42: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Geração de CaracteresEmEm ComputaçãoComputação GráficaGráfica existemexistem duasduas técnicastécnicas básicasbásicas parapara aageraçãogeração dede caracterescaracteres::

1. Cada caracter é definido através do seu contorno(curva o linha poligonal) que se desenha utilizandoprocedimentos do tipo “raster”. Esta solução é custosa

42

procedimentos do tipo “raster”. Esta solução é custosacomputacionalmente e não é muito utilizada em aplicaçõesde processamento de texto. Apenas é utilizada em aplicaçõesespecíficas que editem fontes.

2. Cada caracter é definido em termos de um bitmaprectangular. Gerar um caracter equivale a copiar apenasum bitmap para o ecrã. Todos os caracteres de todas asfontes disponíveis estão assim representadas com umrespectivo bitmap.

Page 43: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

? A discretização dos segmentos pode causar distorções visuaiscomo cisalhamento ou efeito de escada.

Aliasing vs Anti-aliasing

? Essas distorções são chamadas de aliasing? Para reduzir o problema de aliasing, usa-se uma técnica

chamada anti-aliasing? A técnica consiste em uma superamostragem (uma vez que o

aliasing é causada por uma subamostragem)

43

Page 44: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

SUPERAMOSTRAGEM

dividir os pixels em sub-pixels (i.e. 9), aplicar o algoritmo de Bresenham nesses sub-pixels

contar o número desub-pixels “acesos”

por pixel

O pixel será aceso com intensidade proporcional ao número de sub-pixels acesos.

23

1 3

3

3

44

Page 45: Conversão por Varrimento - Universidade de Aveirosweet.ua.pt/pedrocruz/ensino/acg/_downloads/03a_Varrimento.pdf · ser evitada a utilização de funções trigonométricas e funções

Exemplo de Anti-aliasing em Linhas

? Quando a cor de fundo não é preto, o anti-aliasing deve fazer umacomposição da intensidade com a cor de fundo.

? Anti-aliasing é necessário não só para linhas, mas também paraestruturas mais complexas o que torna esta tarefa mais complicada. 45