SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
Primitivas Gráficas
Fonte: Material do Prof. Robson Pequeno
de Sousa e do Prof. Robson Lins
Prof. Márcio Bueno
{cgtarde,cgnoite}@marciobueno.com
Traçado de Primitivas em Dispositivos
Matriciais
Computação Gráfica - Márcio Bueno
 Conversão matricial (ou por varredura)
 processo que permite realizar a conversão de um desenho qualquer
armazenado na memória de imagem para um dispositivo matricial (ou
raster)
 Primitivas Gráficas
 reta, circunferência,elipse
2/42
Traçado de Retas
Computação Gráfica - Márcio Bueno
 A reta é a primitiva 2D mais comum
 Todos wireframes (modelos de arame) 3D são
eventualmente retas 2D
 Os algoritmos aperfeiçoados contêm numerosas técnicas e truques que
ajudam a projetar algoritmos mais avançados
3/42
Características Desejáveis para o
Traçado de Retas
Computação Gráfica - Márcio Bueno
 Linearidade
 Os pixels traçados devem dar a aparência de que estão sobre uma
reta
 Espessura (densidade) uniforme
 A densidade da reta é dada pelo número de pixels traçados dividido
pelo comprimento da reta. Para manter a densidade constante, os
pixels devem ser igualmente espaçados.A imagem do segmento de
reta não deve variar de espessura ao longo de sua extensão.
4/42
Correção no Traçado de Retas
Computação Gráfica - Márcio Bueno5/42
Propriedades Exigidas no Traçado de Retas
Computação Gráfica - Márcio Bueno
 Precisão
 os segmentos devem iniciar e terminar nos pontos
especificados. Caso isso não ocorra, pequenos gaps podem
surgir entre o final de um segmento e o início de outro
 Densidade independente da inclinação
 para segmentos de retas de diferentes inclinações
 Continuidade
 a imagem não apresenta interrupções indesejáveis
 Rapidez no traçado dos segmentos
6/42
Método do Declive - Algoritmo DDA
(Digital Diferential Analyzer)
Computação Gráfica - Márcio Bueno
 Algoritmo DDA (ou do declive) usa o método
incremental
 Equações para 0 ≤ m ≤ 1
yi + 1 = mxi + 1 + b = m(xi + dx) + b =>
yi + 1 = yi + mdx, faça dx = 1 =>
yi + 1 = yi + m
 Equações para m > 1
xi + 1 = xi + 1/m , faça dy = 1
7/42
Implementação do Algoritmo DDA (em C)
Computação Gráfica - Márcio Bueno
void DDA(int X1,Y1,X2,Y2)
{
int Length, I;
float X,Y,Xinc,Yinc;
Length = ABS(X2 - X1);
if (ABS(Y2 -Y1) > Length)
Length = ABS(Y2-Y1);
Xinc = (X2 - X1)/Length;
Yinc = (Y2 -Y1)/Length;
DDA Cria boas linhas, mas consome muito tempo devido as funções de
arredondamento.
*DDA: Digital Differential Analyzer (Método do Declive)
X = X1;
Y =Y1;
while(X<X2){
setpixel(Round(X),Round(Y));
X = X + Xinc;
Y =Y +Yinc;
}
}
8/42
Exemplo do DDA
Computação Gráfica - Márcio Bueno
 Compute quais pixeis devem ser escolhidos para
representar a reta de (6,9) to (11,12).
 Length = ?
 Xinc = ?
 Yinc = ?
6 7 8 9 10 11 12 13
9
10
11
12
13
9/42
Computação Gráfica - Márcio Bueno
Reta de (6,9) para (11,12).
Length := Max of (ABS(11-6),ABS(12-9)) = 5
Xinc := 1
Yinc := 0.6
OsValores computados são:
(6,9), (7,9.6),
(8,10.2), (9,10.8),
(10,11.4), (11,12)
DDA Exemplo
6 7 8 9 10 11 12 13
9
10
11
12
13
10/42
Retas Rápidas – Método do Ponto Médio
Computação Gráfica - Márcio Bueno
 Vamos estudar uma versão do Algoritmo de Bresenham
(1965) denominada Mid Point Line Algorithm ("Algoritmo
do Ponto-Médio ou Meio-Ponto para Retas") por Foley
(1997).
 Bresenham desenvolveu um algoritmo clássico que usa
apenas variáveis inteiras, e permite que o cálculo de
(xi+1,yi+1) seja feito incrementalmente, usando os cálculos
já feitos para (xi,yi).
11/42
Computação Gráfica - Márcio Bueno
 Queremos desenhar uma reta entre os pontos (x1,y1) e
(x2,y2) com declive m entre 0 e 1 (i.e. reta dentro do 1º
octante)
+x-x
-y
+y
Retas Rápidas – Método do Ponto Médio
12/42
Computação Gráfica - Márcio Bueno
 Para as retas do 1º octante, dado um pixel sobre a reta, o
próximo pixel é para direita (E) ou para Direita acima (NE)
 Tendo o pixel (xi, yi), o próximo pixel é NE em (xi+1, yi+1) ou
E em (xi+1, yi)
M
P = (xi ,yi ) E
NE
Q
Retas Rápidas (cont.)
13/42
Forma Implícita da Reta
Computação Gráfica - Márcio Bueno
 Vamos determinar um método para calcular de que
lado da reta está do ponto M. Para isso, considere sua
função implícita, F(x,y) = ax + by + c = 0.
 Se dy = y2 - y1, e dx = x2 - x1,
 A equação da reta em termos de sua inclinação pode
ser escrita como:
Bx
dx
dy
y 
14/42
Estudo do valor da Função
Computação Gráfica - Márcio Bueno
 Forma Implícita
 Em que
 a = dy, b = - dx e c = dx.B
 É fácil verificar que:
 F(x,y) = 0, ponto sobre a linha
 F(x,y) > 0, para pontos abaixo da linha
 F(x,y) < 0, para pontos acima da linha
( , ) . . . 0F x y dy x dx y dx B   
15/42
Computação Gráfica - Márcio Bueno
 Para o teste do ponto-médio, basta calcular
F(M) = F(xp + 1,yp + 1/2) e verificar o seu sinal.
 A decisão será tomada com base no valor da função no ponto
(xp + 1,yp + 1/2)
 define-se uma “variável de decisão”
 d = a(xp + 1) + b(yp + 1/2) + c
 Se d > 0, escolhemos o pixel NE
 Se d < 0, escolhemos o pixel E
 Se d = 0 pode-se escolher qualquer um deles
Escolha de E ou NE
16/42
Determinando a Forma Incremental
Computação Gráfica - Márcio Bueno
 Se E for escolhido, M é incrementado de 1 na direção x.
 Subtraindo dold de dnew para obter a diferença
incremental, tem-se
 dnew = dold + a.
cybxad
cybxayxFd
ppold
ppppnew


)
2
1
()1(
)
2
1
()2()
2
1
,2(
17/42
Determinando a Forma Incremental
Computação Gráfica - Márcio Bueno
 Se NE é escolhido, M é incrementado de 1 em ambas
as direções, x e y.
 Subtraindo dold de dnew, tem-se
 dnew = dold + a + b
cybxad
cybxayxFd
ppold
ppppnew


)
2
1
()1(
)
2
3
()2()
2
1
1,2(
18/42
Determinando o Ponto Inicial
Computação Gráfica - Márcio Bueno
 Como o primeiro pixel corresponde ao ponto (x1,y1),
pode-se calcular diretamente o valor inicial de d para
escolher entre E e NE. O primeiro ponto-médio está
em (x1 + 1,y1 + 1/2) temos:
 Como F(x1 , y1) está sobre a reta, temos que
F(x1 , y1) = 0, daí o resultado acima.
bad
bacbyaxcbbyaaxd
cybxayxFd
start
start
start
2
1
2
1
2
1
.
)
2
1
()1()
2
1
,1(
1111
1111



F(x1, y1)
19/42
Algoritmo
Computação Gráfica - Márcio Bueno20/42
Exemplo
Computação Gráfica - Márcio Bueno
 Indicar que localizações serão calculadas pelo algoritmo
de Bresenham quando se gera por varredura um
segmento de reta entre (1,1) e (8,5) em coordenadas de
tela.
d x y
1 + inc2 = -5
-5+ inc1 = 3
3 + inc2 = -3
-3+ inc1 = 5
5+ inc2 = -1
-1+ inc1 = 7
1
2
3
4
5
6
1
2
2
3
3
4
dx = 8 -1, dy = 5 -1
Inc1 = 2dy = 2*4 =8
Inc2 = 2*(dy – dx) = 2*(4 -7) = -6
dstart = inc1 – dx = 8 -7 = 1
21/42
Traçado de Circunferência
Computação Gráfica - Márcio Bueno
 A equação de uma circunferência com centro na origem e
raio R, em coordenadas cartesianas, é dada por
 A equação explicita da circunferência
2 2 2
x y R 
2 2
( ):y f x y R x   
22/42
Traçado de Circunferência
Computação Gráfica - Márcio Bueno
 Algoritmos Alternativos
 polígono regular de n lados é usado como
aproximação para a circunferência
 Desvantagem
 n deve ser suficientemente grande para se ter
uma boa aproximação
 Quanto maior for o n  algoritmo mais lento
 Estratégias de aceleração precisam ser usadas
23/42
Traçado de Circunferência
Computação Gráfica - Márcio Bueno
 Algoritmos Alternativos
 equação explícita da circunferência, y=f(x) para desenhar
¼ da circunferência (os outros ¾ são desenhados por
simetria)
 Poderíamos variar x de 0 a R, em incrementos de uma
unidade, calculando +y a cada passo através da equação
acima
 Desvantagens
 Requer operações de multiplicação
e raiz quadrada
 Grandes gaps nas regiões onde a
tangente à circunferência é infinita
24/42
Simetria de Ordem 8
Computação Gráfica - Márcio Bueno
 O traçado de uma circunferência pode tirar proveito
de sua simetria
 Suponha que a circunferência esteja centrada na origem
 Se o ponto (x,y) pertence à circunferência, pode-se calcular
os sete outros pontos da circunferência
Basta calcular um arco de circunferência de
45º para obter a circunferência toda
25/42
Simetria de Ordem 8
Computação Gráfica - Márcio Bueno
void PontosCircunferência(int x,int y,int valor)
{
PintaPixel(x,y,valor);
PintaPixel(y,x,valor);
PintaPixel(y,-x,valor);
PintaPixel(x,-y,valor);
PintaPixel(-x,-y,valor);
PintaPixel(-y,-x,valor);
PintaPixel(-y,x,valor);
PintaPixel(-x,y,valor);
}
26/42
Algoritmo do Ponto Médio para
Circunferência
Computação Gráfica - Márcio Bueno
 Suponha que desenhamos o pixel (xp,yp). Qual o proximo pixel a ser
desenhado?
27/42
Algoritmo do Ponto Médio para
Circunferência
Computação Gráfica - Márcio Bueno
 Considere apenas um arco de 45º da circunferência, o
2º octante, de x=0, y=R a x=y= R/(2)1/2.
 Use o procedimento PontosCircunferência para
traçar todos os pontos da circunferência.
 Assim como o algoritmo gerador de linhas, a
estratégia é selecionar entre 2 pixels na malha aquele
que está mais próximo da circunferência, utilizando o
sinal da função no ponto intermediário entre os dois
possíveis pixels ( E ou SE).
28/42
ALGORITMO DO PONTO MÉDIO PARA
CIRCUNFERÊNCIA
Computação Gráfica - Márcio Bueno
 Sinal da função através da equação implícita da
circunferência
F(x,y) = x2 + y2 - R2
= 0 sobre a circunferência
> 0 fora da circunferência
< 0 dentro da circunferência
29/42
Gerando a Variável de Decisão
Computação Gráfica - Márcio Bueno30/42
Gerando a Variável de Decisão
Computação Gráfica - Márcio Bueno
 De forma semelhante a rasterização da reta, determina-se a
variável de decisão dold
 dold = F(xp+1, yp-½) = (xp+1)2 + (yp-½)2 - R2
 Se dold < 0, E é escolhido e o próximo ponto médio será
incrementado de 1 na direção x
 dnew = F(xp+2, yp-½) = dold + (2xp + 3)
 Se dold  0, SE é escolhido e o próximo ponto médio será
incrementado de 1 na direção x e decrementado de 1 na
direção y
 dnew = F(xp+2, yp-½-1) = dold + (2xp - 2yp + 5)
31/42
Variável de Decisão Inicial
Computação Gráfica - Márcio Bueno
 Se iniciamos em (0,R), o próximo ponto médio
estará em (1, R – ½), portanto o valor inicial de d
é dado por:
 dinit = F(1, R - ½)
= 5/4 - R.
 Se R for inteiro, faça h = d – ¼ -> d = h + ¼ ,
segue que a inicialização será h = 1 - R.
dinit = 1 - R
32/42
Algoritmo do Ponto Médio para
Circunferência
Computação Gráfica - Márcio Bueno
void pontomedio(int raio, int valor) {
int x = 0;
int y = raio;
double d = 5/4 – raio;
ponto_circulo (x, y, valor);
while (y > x) {
if (d < 0) /* escolhe E */
d + = 2.0*x + 3.0;
else { /* escolhe SE */)
d + = 2.0*(x – y) + 5;
y - -;
}
x ++;
ponto_circulo (x, y, valor);
} /* while*/
} /*pontomedio*/
void ponto_circulo(int x, int y, int valor)
{
writepixel(x,y, valor);
writepixel(y,x, valor)
writepixel(y,-x, valor)
writepixel(x,-y , valor)
writepixel(-x,-y, valor)
writepixel(-y, -x, valor)
writepixel(-y, x, valor)
writepixel(-x, y, valor)
} /*ponto_circulo*/
33
Resolução Gráfica
Computação Gráfica - Márcio Bueno
 Todos os dispositivos de entrada e saída gráficos
utilizam virtualmente uma malha retangular de
posições endereçáveis a qual é definida como
retângulo de visualização.
 Resolução gráfica de um dispositivo é o número de
posições (pixels) horizontais e verticais que ele pode
distinguir.
34/42
Resolução Gráfica
Computação Gráfica - Márcio Bueno
 Quatro parâmetros definem a resolução gráfica
 ndh - o número de posições endereçáveis
horizontalmente
 ndv - o número de posições endereçáveis verticalmente.
 width - a largura do retângulo de visualização em mm.
 height - a altura do retângulo de visualização em mm.
35/42
Resolução Gráfica
Computação Gráfica - Márcio Bueno
 A partir dos 4 parâmetros as seguintes medidas são definidas:
 resolução horizontal: horiz_res = ndh / width
 tamanho do ponto horizontal: horiz_dot_size = width / ndh
 resolução vertical: vert_res = ndv / height
 tamanho do ponto vertical: vert_dot_size = height / ndv
 total de pontos endereçáveis: total_nr_dots = ndh * ndv
 resolução de área: area_res = total_nr_dots / (width *
height)
 razão de aspecto gráfica: aspect_ratio = vert_dot_size /
horiz_dot_ size
 razão de aspecto físico: physical_aspect_ratio = height /
width
36/42
Sistemas de Coordenadas
Computação Gráfica - Márcio Bueno
 De forma geral são definidos três sistemas de
coordenadas:
 Sistemas de coordenadas do mundo
 É um conjunto de coordenadas cartesianas em
um intervalo qualquer definido pelo usuário.
 Sistemas de coordenadas do dispositivo
 É um conjunto de pixels endereçáveis pelo
dispositivo. Os pixels são endereçados por dois
números inteiros que dão suas coordenadas
horizontal e vertical.
37/42
Sistemas de Coordenadas
Computação Gráfica - Márcio Bueno
 Sistema de coordenadas normalizadas do dispositivo
(NDC).
 Este sistema é intermediário entre os dois anteriores,
definido de tal forma que todo conteúdo da janela de
visualização possua as coordenadas variando no intervalo
[0,1] X [0,1]
 Vantagem da utilização de NDCs é que padrões gráficos
podem ser discutidos usando um sistema de coordenadas
independente de dispositivos gráficos específicos.
38/42
Sistemas de Coordenadas
Computação Gráfica - Márcio Bueno
 Sistema de Coordenada do mundo.
 Sistema de Coordenada dispositivo
 Sistema de Coordenada NDC
0 1
0 1
dcx ndh
dcy ndv
  
  
min max
min max
x x x
y y y
 
 
0 1
0 1
ndcx
ndcy
 
 
39/42
Sistemas de Coordenadas
Computação Gráfica - Márcio Bueno
 Transformação de NDCs para dispositivos
 Transformação de coordenadas do mundo para NDCs.
( *( 1))
( *( 1))
dcx round ndcx ndh
dcy round ndcy ndv
 
 
( min)
( max min)
( min)
( max min)
x x
ndcx
x x
y y
ndcy
y y






40/42
Sistemas de Coordenadas
Computação Gráfica - Márcio Bueno
 Seqüência de transformações
41/42
Exercício
Computação Gráfica - Márcio Bueno
 Escreva os procedimentos "inp_to_ndc",
"ndc_to_user", "user_to_ndc" e "ndc_to_user", que
transformam dados entre os vários sistemas de
coordenadas, conforme ilustrado na figura anterior.
Repita o exercício assumindo que o intervalo de
variação do sistema NDC vai de:
 -1 a +1 (coordenadas normalizadas centradas)
 0 a 100
 Implemente os procedimentos acima.
42/42

Contenu connexe

Tendances

Integral Substituicao Trigonometrica
Integral Substituicao TrigonometricaIntegral Substituicao Trigonometrica
Integral Substituicao Trigonometrica
btizatto1
 
Pil e segmentacao automatica de vídeo
Pil e segmentacao automatica de vídeoPil e segmentacao automatica de vídeo
Pil e segmentacao automatica de vídeo
whanderley freitas
 
Calculo vetorial
Calculo vetorialCalculo vetorial
Calculo vetorial
tooonks
 
Funcoes trigonometricas.ppt
Funcoes trigonometricas.pptFuncoes trigonometricas.ppt
Funcoes trigonometricas.ppt
Rodrigo Carvalho
 
Aplicações da integral_definida_-_comprimento_de_arco
Aplicações da integral_definida_-_comprimento_de_arcoAplicações da integral_definida_-_comprimento_de_arco
Aplicações da integral_definida_-_comprimento_de_arco
mrsquiddo
 
Graficos de funcoes
Graficos de funcoesGraficos de funcoes
Graficos de funcoes
debyreis
 
Apresentação para notes masters paulo [1]
Apresentação para notes masters paulo [1]Apresentação para notes masters paulo [1]
Apresentação para notes masters paulo [1]
dean dundas
 
Imagem de uma função dado o objecto
Imagem de uma função dado o objectoImagem de uma função dado o objecto
Imagem de uma função dado o objecto
Paulo Mutolo
 
Atividades graphmatica( introd. trigonometria funções)
Atividades graphmatica( introd. trigonometria funções)Atividades graphmatica( introd. trigonometria funções)
Atividades graphmatica( introd. trigonometria funções)
Professorfranciscosimao
 

Tendances (20)

Integral Substituicao Trigonometrica
Integral Substituicao TrigonometricaIntegral Substituicao Trigonometrica
Integral Substituicao Trigonometrica
 
Livro texto - unidade ii
Livro  texto - unidade iiLivro  texto - unidade ii
Livro texto - unidade ii
 
Centro de gravidade
Centro de gravidadeCentro de gravidade
Centro de gravidade
 
Imagem de um objecto
Imagem de um objectoImagem de um objecto
Imagem de um objecto
 
Pil e segmentacao automatica de vídeo
Pil e segmentacao automatica de vídeoPil e segmentacao automatica de vídeo
Pil e segmentacao automatica de vídeo
 
Tecnica de integracao resumo
Tecnica de integracao   resumoTecnica de integracao   resumo
Tecnica de integracao resumo
 
Matematica funçao
Matematica funçaoMatematica funçao
Matematica funçao
 
Calculo vetorial
Calculo vetorialCalculo vetorial
Calculo vetorial
 
Funcoes trigonometricas.ppt
Funcoes trigonometricas.pptFuncoes trigonometricas.ppt
Funcoes trigonometricas.ppt
 
Apostila de cálculo 3
Apostila de cálculo 3Apostila de cálculo 3
Apostila de cálculo 3
 
Funcoesvetorias
FuncoesvetoriasFuncoesvetorias
Funcoesvetorias
 
Aplicações da integral_definida_-_comprimento_de_arco
Aplicações da integral_definida_-_comprimento_de_arcoAplicações da integral_definida_-_comprimento_de_arco
Aplicações da integral_definida_-_comprimento_de_arco
 
Trigonometria PARTE 2
Trigonometria PARTE 2Trigonometria PARTE 2
Trigonometria PARTE 2
 
Funcoes
FuncoesFuncoes
Funcoes
 
Graficos de funcoes
Graficos de funcoesGraficos de funcoes
Graficos de funcoes
 
Funcoes trigonometricas senoides
Funcoes trigonometricas  senoidesFuncoes trigonometricas  senoides
Funcoes trigonometricas senoides
 
Exercícios função de 2° grau 2p
Exercícios função de 2° grau 2pExercícios função de 2° grau 2p
Exercícios função de 2° grau 2p
 
Apresentação para notes masters paulo [1]
Apresentação para notes masters paulo [1]Apresentação para notes masters paulo [1]
Apresentação para notes masters paulo [1]
 
Imagem de uma função dado o objecto
Imagem de uma função dado o objectoImagem de uma função dado o objecto
Imagem de uma função dado o objecto
 
Atividades graphmatica( introd. trigonometria funções)
Atividades graphmatica( introd. trigonometria funções)Atividades graphmatica( introd. trigonometria funções)
Atividades graphmatica( introd. trigonometria funções)
 

Similaire à Cg 03 primitivas_graficas

Resolucao dos exercicios_integrais
Resolucao dos exercicios_integraisResolucao dos exercicios_integrais
Resolucao dos exercicios_integrais
Wilson Kushima
 
Mat funcao polinomial 2 grau
Mat funcao polinomial 2 grauMat funcao polinomial 2 grau
Mat funcao polinomial 2 grau
trigono_metria
 
Geometria analitica-gaia
Geometria analitica-gaiaGeometria analitica-gaia
Geometria analitica-gaia
slidericardinho
 
Base trigonometria 001
Base trigonometria  001Base trigonometria  001
Base trigonometria 001
trigono_metria
 
Trigonometria ponteiros relogio
Trigonometria ponteiros relogioTrigonometria ponteiros relogio
Trigonometria ponteiros relogio
trigono_metria
 
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 2
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 2Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 2
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 2
Bowman Guimaraes
 

Similaire à Cg 03 primitivas_graficas (20)

Lista 1 - Robótica (Jim & Ronie)
Lista 1 - Robótica (Jim & Ronie)Lista 1 - Robótica (Jim & Ronie)
Lista 1 - Robótica (Jim & Ronie)
 
Resolucao dos exercicios_integrais
Resolucao dos exercicios_integraisResolucao dos exercicios_integrais
Resolucao dos exercicios_integrais
 
Resolucao dos exercicios_integrais
Resolucao dos exercicios_integraisResolucao dos exercicios_integrais
Resolucao dos exercicios_integrais
 
Revisão de geometria analitica
Revisão de geometria analiticaRevisão de geometria analitica
Revisão de geometria analitica
 
Mat funcao polinomial 2 grau
Mat funcao polinomial 2 grauMat funcao polinomial 2 grau
Mat funcao polinomial 2 grau
 
Teste 5 - funções + geometria analitica + critérios de avaçiação
Teste 5 - funções + geometria analitica  + critérios de avaçiaçãoTeste 5 - funções + geometria analitica  + critérios de avaçiação
Teste 5 - funções + geometria analitica + critérios de avaçiação
 
Aulaomit
AulaomitAulaomit
Aulaomit
 
Geometria analitica
Geometria analiticaGeometria analitica
Geometria analitica
 
Geometria analitica-gaia
Geometria analitica-gaiaGeometria analitica-gaia
Geometria analitica-gaia
 
Tecnicas integração
Tecnicas integraçãoTecnicas integração
Tecnicas integração
 
Geometria analítica: ponto, reta e circunferência
Geometria analítica: ponto, reta e circunferênciaGeometria analítica: ponto, reta e circunferência
Geometria analítica: ponto, reta e circunferência
 
Base trigonometria 001
Base trigonometria  001Base trigonometria  001
Base trigonometria 001
 
Gv economia 1fase_2010
Gv economia 1fase_2010Gv economia 1fase_2010
Gv economia 1fase_2010
 
Aula7 GA.pptx
Aula7 GA.pptxAula7 GA.pptx
Aula7 GA.pptx
 
Resumo do 7º e 8º ano
Resumo do 7º e 8º anoResumo do 7º e 8º ano
Resumo do 7º e 8º ano
 
Curso de Matlab avancado 1
Curso de Matlab avancado 1Curso de Matlab avancado 1
Curso de Matlab avancado 1
 
Resolução da lista 1 quadriláteros
Resolução da lista 1   quadriláterosResolução da lista 1   quadriláteros
Resolução da lista 1 quadriláteros
 
Glauco exercicios resolvidos (1)
Glauco exercicios resolvidos (1)Glauco exercicios resolvidos (1)
Glauco exercicios resolvidos (1)
 
Trigonometria ponteiros relogio
Trigonometria ponteiros relogioTrigonometria ponteiros relogio
Trigonometria ponteiros relogio
 
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 2
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 2Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 2
Www.uff.br gma informacoes disciplinas_calc 03 -a- 2012-2_lista 2
 

Dernier

Dernier (9)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 

Cg 03 primitivas_graficas

  • 1. Primitivas Gráficas Fonte: Material do Prof. Robson Pequeno de Sousa e do Prof. Robson Lins Prof. Márcio Bueno {cgtarde,cgnoite}@marciobueno.com
  • 2. Traçado de Primitivas em Dispositivos Matriciais Computação Gráfica - Márcio Bueno  Conversão matricial (ou por varredura)  processo que permite realizar a conversão de um desenho qualquer armazenado na memória de imagem para um dispositivo matricial (ou raster)  Primitivas Gráficas  reta, circunferência,elipse 2/42
  • 3. Traçado de Retas Computação Gráfica - Márcio Bueno  A reta é a primitiva 2D mais comum  Todos wireframes (modelos de arame) 3D são eventualmente retas 2D  Os algoritmos aperfeiçoados contêm numerosas técnicas e truques que ajudam a projetar algoritmos mais avançados 3/42
  • 4. Características Desejáveis para o Traçado de Retas Computação Gráfica - Márcio Bueno  Linearidade  Os pixels traçados devem dar a aparência de que estão sobre uma reta  Espessura (densidade) uniforme  A densidade da reta é dada pelo número de pixels traçados dividido pelo comprimento da reta. Para manter a densidade constante, os pixels devem ser igualmente espaçados.A imagem do segmento de reta não deve variar de espessura ao longo de sua extensão. 4/42
  • 5. Correção no Traçado de Retas Computação Gráfica - Márcio Bueno5/42
  • 6. Propriedades Exigidas no Traçado de Retas Computação Gráfica - Márcio Bueno  Precisão  os segmentos devem iniciar e terminar nos pontos especificados. Caso isso não ocorra, pequenos gaps podem surgir entre o final de um segmento e o início de outro  Densidade independente da inclinação  para segmentos de retas de diferentes inclinações  Continuidade  a imagem não apresenta interrupções indesejáveis  Rapidez no traçado dos segmentos 6/42
  • 7. Método do Declive - Algoritmo DDA (Digital Diferential Analyzer) Computação Gráfica - Márcio Bueno  Algoritmo DDA (ou do declive) usa o método incremental  Equações para 0 ≤ m ≤ 1 yi + 1 = mxi + 1 + b = m(xi + dx) + b => yi + 1 = yi + mdx, faça dx = 1 => yi + 1 = yi + m  Equações para m > 1 xi + 1 = xi + 1/m , faça dy = 1 7/42
  • 8. Implementação do Algoritmo DDA (em C) Computação Gráfica - Márcio Bueno void DDA(int X1,Y1,X2,Y2) { int Length, I; float X,Y,Xinc,Yinc; Length = ABS(X2 - X1); if (ABS(Y2 -Y1) > Length) Length = ABS(Y2-Y1); Xinc = (X2 - X1)/Length; Yinc = (Y2 -Y1)/Length; DDA Cria boas linhas, mas consome muito tempo devido as funções de arredondamento. *DDA: Digital Differential Analyzer (Método do Declive) X = X1; Y =Y1; while(X<X2){ setpixel(Round(X),Round(Y)); X = X + Xinc; Y =Y +Yinc; } } 8/42
  • 9. Exemplo do DDA Computação Gráfica - Márcio Bueno  Compute quais pixeis devem ser escolhidos para representar a reta de (6,9) to (11,12).  Length = ?  Xinc = ?  Yinc = ? 6 7 8 9 10 11 12 13 9 10 11 12 13 9/42
  • 10. Computação Gráfica - Márcio Bueno Reta de (6,9) para (11,12). Length := Max of (ABS(11-6),ABS(12-9)) = 5 Xinc := 1 Yinc := 0.6 OsValores computados são: (6,9), (7,9.6), (8,10.2), (9,10.8), (10,11.4), (11,12) DDA Exemplo 6 7 8 9 10 11 12 13 9 10 11 12 13 10/42
  • 11. Retas Rápidas – Método do Ponto Médio Computação Gráfica - Márcio Bueno  Vamos estudar uma versão do Algoritmo de Bresenham (1965) denominada Mid Point Line Algorithm ("Algoritmo do Ponto-Médio ou Meio-Ponto para Retas") por Foley (1997).  Bresenham desenvolveu um algoritmo clássico que usa apenas variáveis inteiras, e permite que o cálculo de (xi+1,yi+1) seja feito incrementalmente, usando os cálculos já feitos para (xi,yi). 11/42
  • 12. Computação Gráfica - Márcio Bueno  Queremos desenhar uma reta entre os pontos (x1,y1) e (x2,y2) com declive m entre 0 e 1 (i.e. reta dentro do 1º octante) +x-x -y +y Retas Rápidas – Método do Ponto Médio 12/42
  • 13. Computação Gráfica - Márcio Bueno  Para as retas do 1º octante, dado um pixel sobre a reta, o próximo pixel é para direita (E) ou para Direita acima (NE)  Tendo o pixel (xi, yi), o próximo pixel é NE em (xi+1, yi+1) ou E em (xi+1, yi) M P = (xi ,yi ) E NE Q Retas Rápidas (cont.) 13/42
  • 14. Forma Implícita da Reta Computação Gráfica - Márcio Bueno  Vamos determinar um método para calcular de que lado da reta está do ponto M. Para isso, considere sua função implícita, F(x,y) = ax + by + c = 0.  Se dy = y2 - y1, e dx = x2 - x1,  A equação da reta em termos de sua inclinação pode ser escrita como: Bx dx dy y  14/42
  • 15. Estudo do valor da Função Computação Gráfica - Márcio Bueno  Forma Implícita  Em que  a = dy, b = - dx e c = dx.B  É fácil verificar que:  F(x,y) = 0, ponto sobre a linha  F(x,y) > 0, para pontos abaixo da linha  F(x,y) < 0, para pontos acima da linha ( , ) . . . 0F x y dy x dx y dx B    15/42
  • 16. Computação Gráfica - Márcio Bueno  Para o teste do ponto-médio, basta calcular F(M) = F(xp + 1,yp + 1/2) e verificar o seu sinal.  A decisão será tomada com base no valor da função no ponto (xp + 1,yp + 1/2)  define-se uma “variável de decisão”  d = a(xp + 1) + b(yp + 1/2) + c  Se d > 0, escolhemos o pixel NE  Se d < 0, escolhemos o pixel E  Se d = 0 pode-se escolher qualquer um deles Escolha de E ou NE 16/42
  • 17. Determinando a Forma Incremental Computação Gráfica - Márcio Bueno  Se E for escolhido, M é incrementado de 1 na direção x.  Subtraindo dold de dnew para obter a diferença incremental, tem-se  dnew = dold + a. cybxad cybxayxFd ppold ppppnew   ) 2 1 ()1( ) 2 1 ()2() 2 1 ,2( 17/42
  • 18. Determinando a Forma Incremental Computação Gráfica - Márcio Bueno  Se NE é escolhido, M é incrementado de 1 em ambas as direções, x e y.  Subtraindo dold de dnew, tem-se  dnew = dold + a + b cybxad cybxayxFd ppold ppppnew   ) 2 1 ()1( ) 2 3 ()2() 2 1 1,2( 18/42
  • 19. Determinando o Ponto Inicial Computação Gráfica - Márcio Bueno  Como o primeiro pixel corresponde ao ponto (x1,y1), pode-se calcular diretamente o valor inicial de d para escolher entre E e NE. O primeiro ponto-médio está em (x1 + 1,y1 + 1/2) temos:  Como F(x1 , y1) está sobre a reta, temos que F(x1 , y1) = 0, daí o resultado acima. bad bacbyaxcbbyaaxd cybxayxFd start start start 2 1 2 1 2 1 . ) 2 1 ()1() 2 1 ,1( 1111 1111    F(x1, y1) 19/42
  • 20. Algoritmo Computação Gráfica - Márcio Bueno20/42
  • 21. Exemplo Computação Gráfica - Márcio Bueno  Indicar que localizações serão calculadas pelo algoritmo de Bresenham quando se gera por varredura um segmento de reta entre (1,1) e (8,5) em coordenadas de tela. d x y 1 + inc2 = -5 -5+ inc1 = 3 3 + inc2 = -3 -3+ inc1 = 5 5+ inc2 = -1 -1+ inc1 = 7 1 2 3 4 5 6 1 2 2 3 3 4 dx = 8 -1, dy = 5 -1 Inc1 = 2dy = 2*4 =8 Inc2 = 2*(dy – dx) = 2*(4 -7) = -6 dstart = inc1 – dx = 8 -7 = 1 21/42
  • 22. Traçado de Circunferência Computação Gráfica - Márcio Bueno  A equação de uma circunferência com centro na origem e raio R, em coordenadas cartesianas, é dada por  A equação explicita da circunferência 2 2 2 x y R  2 2 ( ):y f x y R x    22/42
  • 23. Traçado de Circunferência Computação Gráfica - Márcio Bueno  Algoritmos Alternativos  polígono regular de n lados é usado como aproximação para a circunferência  Desvantagem  n deve ser suficientemente grande para se ter uma boa aproximação  Quanto maior for o n  algoritmo mais lento  Estratégias de aceleração precisam ser usadas 23/42
  • 24. Traçado de Circunferência Computação Gráfica - Márcio Bueno  Algoritmos Alternativos  equação explícita da circunferência, y=f(x) para desenhar ¼ da circunferência (os outros ¾ são desenhados por simetria)  Poderíamos variar x de 0 a R, em incrementos de uma unidade, calculando +y a cada passo através da equação acima  Desvantagens  Requer operações de multiplicação e raiz quadrada  Grandes gaps nas regiões onde a tangente à circunferência é infinita 24/42
  • 25. Simetria de Ordem 8 Computação Gráfica - Márcio Bueno  O traçado de uma circunferência pode tirar proveito de sua simetria  Suponha que a circunferência esteja centrada na origem  Se o ponto (x,y) pertence à circunferência, pode-se calcular os sete outros pontos da circunferência Basta calcular um arco de circunferência de 45º para obter a circunferência toda 25/42
  • 26. Simetria de Ordem 8 Computação Gráfica - Márcio Bueno void PontosCircunferência(int x,int y,int valor) { PintaPixel(x,y,valor); PintaPixel(y,x,valor); PintaPixel(y,-x,valor); PintaPixel(x,-y,valor); PintaPixel(-x,-y,valor); PintaPixel(-y,-x,valor); PintaPixel(-y,x,valor); PintaPixel(-x,y,valor); } 26/42
  • 27. Algoritmo do Ponto Médio para Circunferência Computação Gráfica - Márcio Bueno  Suponha que desenhamos o pixel (xp,yp). Qual o proximo pixel a ser desenhado? 27/42
  • 28. Algoritmo do Ponto Médio para Circunferência Computação Gráfica - Márcio Bueno  Considere apenas um arco de 45º da circunferência, o 2º octante, de x=0, y=R a x=y= R/(2)1/2.  Use o procedimento PontosCircunferência para traçar todos os pontos da circunferência.  Assim como o algoritmo gerador de linhas, a estratégia é selecionar entre 2 pixels na malha aquele que está mais próximo da circunferência, utilizando o sinal da função no ponto intermediário entre os dois possíveis pixels ( E ou SE). 28/42
  • 29. ALGORITMO DO PONTO MÉDIO PARA CIRCUNFERÊNCIA Computação Gráfica - Márcio Bueno  Sinal da função através da equação implícita da circunferência F(x,y) = x2 + y2 - R2 = 0 sobre a circunferência > 0 fora da circunferência < 0 dentro da circunferência 29/42
  • 30. Gerando a Variável de Decisão Computação Gráfica - Márcio Bueno30/42
  • 31. Gerando a Variável de Decisão Computação Gráfica - Márcio Bueno  De forma semelhante a rasterização da reta, determina-se a variável de decisão dold  dold = F(xp+1, yp-½) = (xp+1)2 + (yp-½)2 - R2  Se dold < 0, E é escolhido e o próximo ponto médio será incrementado de 1 na direção x  dnew = F(xp+2, yp-½) = dold + (2xp + 3)  Se dold  0, SE é escolhido e o próximo ponto médio será incrementado de 1 na direção x e decrementado de 1 na direção y  dnew = F(xp+2, yp-½-1) = dold + (2xp - 2yp + 5) 31/42
  • 32. Variável de Decisão Inicial Computação Gráfica - Márcio Bueno  Se iniciamos em (0,R), o próximo ponto médio estará em (1, R – ½), portanto o valor inicial de d é dado por:  dinit = F(1, R - ½) = 5/4 - R.  Se R for inteiro, faça h = d – ¼ -> d = h + ¼ , segue que a inicialização será h = 1 - R. dinit = 1 - R 32/42
  • 33. Algoritmo do Ponto Médio para Circunferência Computação Gráfica - Márcio Bueno void pontomedio(int raio, int valor) { int x = 0; int y = raio; double d = 5/4 – raio; ponto_circulo (x, y, valor); while (y > x) { if (d < 0) /* escolhe E */ d + = 2.0*x + 3.0; else { /* escolhe SE */) d + = 2.0*(x – y) + 5; y - -; } x ++; ponto_circulo (x, y, valor); } /* while*/ } /*pontomedio*/ void ponto_circulo(int x, int y, int valor) { writepixel(x,y, valor); writepixel(y,x, valor) writepixel(y,-x, valor) writepixel(x,-y , valor) writepixel(-x,-y, valor) writepixel(-y, -x, valor) writepixel(-y, x, valor) writepixel(-x, y, valor) } /*ponto_circulo*/ 33
  • 34. Resolução Gráfica Computação Gráfica - Márcio Bueno  Todos os dispositivos de entrada e saída gráficos utilizam virtualmente uma malha retangular de posições endereçáveis a qual é definida como retângulo de visualização.  Resolução gráfica de um dispositivo é o número de posições (pixels) horizontais e verticais que ele pode distinguir. 34/42
  • 35. Resolução Gráfica Computação Gráfica - Márcio Bueno  Quatro parâmetros definem a resolução gráfica  ndh - o número de posições endereçáveis horizontalmente  ndv - o número de posições endereçáveis verticalmente.  width - a largura do retângulo de visualização em mm.  height - a altura do retângulo de visualização em mm. 35/42
  • 36. Resolução Gráfica Computação Gráfica - Márcio Bueno  A partir dos 4 parâmetros as seguintes medidas são definidas:  resolução horizontal: horiz_res = ndh / width  tamanho do ponto horizontal: horiz_dot_size = width / ndh  resolução vertical: vert_res = ndv / height  tamanho do ponto vertical: vert_dot_size = height / ndv  total de pontos endereçáveis: total_nr_dots = ndh * ndv  resolução de área: area_res = total_nr_dots / (width * height)  razão de aspecto gráfica: aspect_ratio = vert_dot_size / horiz_dot_ size  razão de aspecto físico: physical_aspect_ratio = height / width 36/42
  • 37. Sistemas de Coordenadas Computação Gráfica - Márcio Bueno  De forma geral são definidos três sistemas de coordenadas:  Sistemas de coordenadas do mundo  É um conjunto de coordenadas cartesianas em um intervalo qualquer definido pelo usuário.  Sistemas de coordenadas do dispositivo  É um conjunto de pixels endereçáveis pelo dispositivo. Os pixels são endereçados por dois números inteiros que dão suas coordenadas horizontal e vertical. 37/42
  • 38. Sistemas de Coordenadas Computação Gráfica - Márcio Bueno  Sistema de coordenadas normalizadas do dispositivo (NDC).  Este sistema é intermediário entre os dois anteriores, definido de tal forma que todo conteúdo da janela de visualização possua as coordenadas variando no intervalo [0,1] X [0,1]  Vantagem da utilização de NDCs é que padrões gráficos podem ser discutidos usando um sistema de coordenadas independente de dispositivos gráficos específicos. 38/42
  • 39. Sistemas de Coordenadas Computação Gráfica - Márcio Bueno  Sistema de Coordenada do mundo.  Sistema de Coordenada dispositivo  Sistema de Coordenada NDC 0 1 0 1 dcx ndh dcy ndv       min max min max x x x y y y     0 1 0 1 ndcx ndcy     39/42
  • 40. Sistemas de Coordenadas Computação Gráfica - Márcio Bueno  Transformação de NDCs para dispositivos  Transformação de coordenadas do mundo para NDCs. ( *( 1)) ( *( 1)) dcx round ndcx ndh dcy round ndcy ndv     ( min) ( max min) ( min) ( max min) x x ndcx x x y y ndcy y y       40/42
  • 41. Sistemas de Coordenadas Computação Gráfica - Márcio Bueno  Seqüência de transformações 41/42
  • 42. Exercício Computação Gráfica - Márcio Bueno  Escreva os procedimentos "inp_to_ndc", "ndc_to_user", "user_to_ndc" e "ndc_to_user", que transformam dados entre os vários sistemas de coordenadas, conforme ilustrado na figura anterior. Repita o exercício assumindo que o intervalo de variação do sistema NDC vai de:  -1 a +1 (coordenadas normalizadas centradas)  0 a 100  Implemente os procedimentos acima. 42/42