Rasterização de primitivas 2D

Documentos relacionados
Desenho de Segmentos de Recta

Primitivas Gráficas. Prof. Márcio Bueno Fonte: Material do Prof. Robson Pequeno de Sousa e do Prof.

Problema. Conversão Matricial. Octantes do Sistema de Coordenadas Euclidiano. Sistema de Coordenadas do Dispositivo. Maria Cristina F.

Prof. Julio Arakaki. Ciência da Computação

Conversão Matricial. Prof. Fernando V. Paulovich 20 de maio de SCC Computação Gráca

Módulo de Equações do Segundo Grau. Equações do Segundo Grau: Resultados Básicos. Nono Ano

4.4 Limite e continuidade

Driver Next Versão 1.0 de Português

(72) Inventor(es): (74) Mandatário: (54) Epígrafe: APLICAÇÃO COMPUTORIZADA PARA O CONTROLO DE ROBOTS INDUSTRIAIS

Optimização e Algoritmos (2004/2005)

Módulo de Aprendizagem I

Recorrendo à nossa imaginação podemos tentar escrever números racionais de modo semelhante: 1 2 =

. B(x 2, y 2 ). A(x 1, y 1 )

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Computação Gráfica 04

Probabilidade. Evento (E) é o acontecimento que deve ser analisado.

Computação Gráfica - 12

Aula 03. Processadores. Prof. Ricardo Palma

ENG1000 Introdução à Engenharia

Aula 5. Uma partícula evolui na reta. A trajetória é uma função que dá a sua posição em função do tempo:

Pipeline Gráfico Cluter & Durand, MIT

Lista de Exercícios Critérios de Divisibilidade

5838 Maquinação Introdução ao CNC

PESQUISA OPERACIONAL -PROGRAMAÇÃO LINEAR. Prof. Angelo Augusto Frozza, M.Sc.

Primeira Lista de Exercícios de Métodos Numéricos II Primeiro semestre de 2015

ProLin V1.0. Programa de problemas de programação linear mista

Comecemos por relembrar as propriedades das potências: = a x c) a x a y = a x+y

Tutorial. Georreferenciamento de Imagens. versão /08/2008. Autores: Rafael Bellucci Moretti, Vitor Pires Vencovsky

Computação Gráfica. Rasterização de Linhas Professora Sheila Cáceres

Instruções básicas para a análise de um pórtico 2D com o programa ROBOT Estruturas de Betão 2

ORIENTAÇÕES: 1) Considere as expressões algébricas dos quadros abaixo: Responda às perguntas:

GEOMETRIA DESCRITIVA... o que é e para que serve!

Capítulo1 Tensão Normal

EXERCÍCIOS DE ÁLGEBRA LINEAR E GEOMETRIA ANALÍTICA (sistemas de equações lineares e outros exercícios)

Proposta de resolução da Prova de Matemática A (código 635) 2ª fase. 19 de Julho de 2010

Álgebra Linear Aplicada à Compressão de Imagens. Universidade de Lisboa Instituto Superior Técnico. Mestrado em Engenharia Aeroespacial

MODULAÇÃO DE UM SINAL ANALÓGICO

8 -SISTEMA DE PROJEÇÃO UNIVERSAL TRANSVERSA DE MERCATOR - UTM

e Autorizador Odontológico

Microeconomia. Prof.: Antonio Carlos Assumpção

FÍSICA EXPERIMENTAL 3001

Unidade 3 Função Afim

Resolução do exemplo 8.6a - pág 61 Apresente, analítica e geometricamente, a solução dos seguintes sistemas lineares.

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO PROGRAMA DE EDUCAÇÃO TUTORIAL - MATEMÁTICA PROJETO FUNDAMENTOS DE MATEMÁTICA ELEMENTAR

M =C J, fórmula do montante

Figura 4.1: Diagrama de representação de uma função de 2 variáveis

Lógica de Programação. Profas. Simone Campos Camargo e Janete Ferreira Biazotto

Escola Secundária/3 da Sé-Lamego Ficha de Trabalho de Matemática Ano Lectivo 2003/04 Geometria 2 - Revisões 11.º Ano

Contextualização Pesquisa Operacional - Unidade de Conteúdo II

Procedimento Gestão Documental

Calculando seno(x)/x com o interpretador Hall.

OPERAÇÕES COM FRAÇÕES

Testes de Hipóteses Estatísticas

Seu pé direito nas melhores Faculdades

Entropia, Entropia Relativa

ÁLGEBRA VETORIAL E GEOMETRIA ANALÍTICA (UFCG- CUITÉ)

Software PHC com MapPoint 2007

EXAME DE MACS 2º FASE 2014/2015 = 193

AULA 07 Distribuições Discretas de Probabilidade

Aplicações Diferentes Para Números Complexos

Sejam P1(x1,y1) e P2(x2,y2) pontos pertencentes ao plano. A equação da reta pode ser expressa como: ou

ISCTE- IUL, Dpto de Métodos Quantitativos. 28 de Maio de 2012 Ano lectivo 2011/2012

Matemática para a Economia I - 1 a lista de exercícios Prof. - Juliana Coelho

Se inicialmente, o tanque estava com 100 litros, pode-se afirmar que ao final do dia o mesmo conterá.

[RESOLUÇÃO] Economia I; 2012/2013 (2º semestre) Prova da Época Recurso 3 de Julho de 2013

LINEARIZAÇÃO DE GRÁFICOS

Inteligência Artificial

O circuito RLC. 1. Introdução

1 Circuitos Pneumáticos

Semana 7 Resolução de Sistemas Lineares

Exercícios de Aprofundamento Mat Polinômios e Matrizes

A uma plataforma online de gestão de condomínios permite gerir de forma fácil e simples a atividade do seu condomínio.

Probabilidade. Luiz Carlos Terra

Prof. Daniela Barreiro Claro

Fundamentos de Programação. Diagrama de blocos

Análise de Variância (ANOVA)

LOGO DO WEBSITE DA FUTURA APP


Matemática Básica Intervalos

ÁLGEBRA. Aula 1 _ Função Polinomial do 2º Grau Professor Luciano Nóbrega. Maria Auxiliadora

Os eixo x e y dividem a circunferência em quatro partes congruentes chamadas quadrantes, numeradas de 1 a 4 conforme figura abaixo:

EGEA ESAPL - IPVC. Resolução de Problemas de Programação Linear, com recurso ao Excel

Actividade de enriquecimento. Algoritmo da raiz quadrada

1 - POLÍGONOS REGULARES E CIRCUNFERÊNCIAS

UNESP - Faculdade de Engenharia de Guaratinguetá 1

Programação 2009/2010 MEEC - MEAer Laboratório 5 Semana de 26 de outubro de 2009

ALGORITMOS E COMPLEXIDADE PROBLEMAS E ALGORITMOS

Os dados quantitativos também podem ser de natureza discreta ou contínua.

Manual do Usuário Sistema de Acuidade Visual Digital

Universidade Federal de Goiás Campus Catalão Departamento de Matemática

Distribuição Normal de Probabilidade

PLANILHA DE NIVELAMENTO

aplicação arquivo Condições Gerais de Utilização

0.1 Introdução Conceitos básicos

Flávia Rodrigues. Silves, 26 de Abril de 2010

1 Visão Geral. 2 Instalação e Primeira Utilização. Manual de Instalação do Gold Pedido

CONFIGURAçÃO E GERAÇÃO DO LALUR. Parâmetros

Sistema de Recuperação da Senha nos Sistemas Informáticos da FEUP

AV2 - MA UMA SOLUÇÃO

Instituto Superior Técnico

Transcrição:

Rasterização de primitivas 2D Computação Gráfica Inverno 2012/2013 Carlos Guedes @ 2012 ISEL/ADEETC Computação Gráfica 1

http://hof.povray.org/images/chado_big.jpg 2

Sumário Enquadramento Viewport vs window Rasterização de primitivas gráficas Linhas Círculos 3

Enquadramentos (1) Mundo virtual Para que o modelo do mundo virtual seja mostrado ao utilizador, é necessário calcular, sobre ele, a vista a apresentar Quais são as unidades no mundo? Metros, polegadas, etc. Coordenadas do mundo Como vimos, este processamento é apenas um dos muitos feitos no pipeline de processamento Muitas vezes, ao mesmo tempo que se realiza esta transformação, também se efectua o clipping Definir a janela no mundo (origem) as coordenadas têm que ser mapeadas para coordenadas do ecrã (ou melhor, coordenadas do dispositivo) Definir a janela no dispositivo de saída (destino) 4

Enquadramentos (2) Window vs Viewport Window A região rectangular, definida sobre o mundo, que representa a zona a apresentar ao utilizador Máximo alcance das coordenadas do dispositivo Coordenadas do mundo - WC Viewport A região rectangular, definida sobre o dispositivo, onde será visualizada a janela do mundo 5

Enquadramentos (3) Note-se que o conceito de janela não é o aquele a que estamos habituados Não existe afinidade entre a janela rectangular que define uma área no mundo e a janela utilizada pelos gestores de janelas popularizados pelo Windows OS e Mac OS Poder-se-á dizer que, uma vez que o conceito de gestor de janelas é mais recente, e dado que o conceito de janela tem já um semântica bem definida em computação gráfica, o nome deveria ter sido outro - viewports 6

Enquadramentos (4) Note-se que os viewports podem não ter o mesmo rácio que a janela 16:9 Coordenadas do mundo - WC Rácio do Viewport 16:9 - DC 4:3 Rácio do Viewport = janela Rácio do Viewport 4:3 - DC 7

Sumário Enquadramento Viewport vs window Rasterização de primitivas gráficas Linhas Círculos 8

Primitivas de rasterização Já foi referido que todos os objectos têm que ser representados numa matriz de pixéis, de forma a serem mostrados pelo dispositivo raster (neste caso num monitor) Q: Como fazer isto? Como representar objectos complexos? Quais as formas envolvidas? Pixéis a 500% Linhas Sequências de pixéis, colocados correctamente entre os dois pontos que definem o início e fim da linha Quadrados Triângulos 9

Sumário Enquadramento Viewport vs window Rasterização de primitivas gráficas Linhas Círculos 10

Rasterização de linhas Os dispositivos raster não conseguem representar uma recta perfeita apenas uma aproximação Motivo: É necessário passar de um meio contínuo para um meio discreto É então necessário encontrar um algoritmo que consiga uma boa aproximação a um segmento de recta entre dois pontos 11

Recta um pouco de matemática (1) Matematicamente falando, uma linha (em português) designa-se por recta. Definições: A geometrical object that is straight, infinitely long and infinitely thin. http://mathopenref.com/line.html The infinite extension in both directions of a line segment, which is the path of shortest distance between two points. http://mathworld.wolfram.com/line.html Equações da recta Forma explícita y = mx + B Forma implícita Ax + By + C = 0 Forma paramétrica r(t) = o + td Ver: http://www.cut-the-knot.org/curriculum/calculus/straightline.shtml 12

Recta um pouco de matemática (2) Qual é o significado do declive (m) e do valor B na forma explícita da equação da recta? m B representa a inclinação (ângulo em relação ao eixo do XX) da recta Não cresce de forma linear em relação ao ângulo que faz com o eixo do XX Toma valor 0 para rectas horizontais Toma valor 1 para inclinações de 45º Toma valor infinito ( ) para rectas verticais Local onde a recta intercepta o eixo do YY m = Y m = -1 m = 1 y = mx + B m = 0 X Nota: Esta equação não suporta a definição de rectas verticais 13

Recta um pouco de matemática (3) Para que serve a forma implícita da equação da recta? Que significado têm os valores A, B e C? A e B C Componentes do vector n=(a,b) que é normal à recta Menor distância à origem (escala em relação à normal n) -1*(3) + 2*(3) 1 > 0 acima da recta Ax + By + C = 0-1 x + 2 y - 1 = 0-1*(5) + 2*(3) 1 = 0 Ponto da recta Esta forma é útil para verificar se determinado ponto pertence à recta; se está acima da recta (direcção da normal); ou abaixo da recta. n = (-1, 2) -1*(5) + 2*(1) 1 < 0 abaixo da recta Nota: Esta equação suporta a definição de rectas verticais 14

Recta um pouco de matemática (4) Para que serve a forma paramétrica da equação da recta? Que significado têm os valores O, D e t? R(t) = O + td O: Ponto (O de origem) da recta D: Direcção da recta t: Variável geradora de pontos na recta que passa pelo ponto O e tem direcção D. R(t) = (1,1) + t(2,1) R(2) = (5, 3) Esta forma é útil para (p.ex): Cálculo de intersecções Cálculo da posição de um jogador que anda em linha recta a determinada velocidade. R(-1) = (-1, 0) O = (1, 1) D = (2, 1) Nota: Esta equação suporta a definição de todas as rectas 15

Primitivas de rasterização linhas (1) Algoritmo incremental Este algoritmo calcula, de forma incremental, os pixéis mais próximos da recta real Recebe como entrada as coordenadas (x,y) de dois pontos da recta Apenas desenha o segmento de recta definido pelos dois pontos (finito) Primeiro, calcula-se o declive da recta y m x Partindo do ponto inicial, (x i, y i ), onde i=0, incrementa-se a coordenada em X, um pixel de cada vez x i 1 xi 1 O valor de Y calcula-se através da forma explícita da equação da recta y = mx + B 16

Primitivas de rasterização linhas (2) Algoritmo incremental Dado que a coordenada em X é incrementada de uma unidade, não existe problema em lidar com ela na matriz raster Já Y, depende do resultado da multiplicação entre dois reais m e x i. É necessário proceder a um acerto no valor de Y de forma a que passe para o pixel que melhor representa o seu valor real P i xi, round( yi ) round( yi ) floor(0.5 yi ) De forma a optimizar os cálculos, pode ser feita uma simplificação tendo em atenção que yi 1 mx i1 B m( xi x) B y i mx x 1 Sabendo que e y mx B, então y i1 y i m 17

Primitivas de rasterização linhas (3) Algoritmo incremental (x i+1, round(y i+1 )) Linha pretendida (x i, y i ) (x i, round(y i )) (x i+1, y i+1 ) Note que se m 1, o incremento em y será maior que 1. Neste caso baste inverter os papeis de x e y y i 1 yi 1 e xi 1 xi 1/ m 18

Primitivas de rasterização linhas (4) Algoritmo incremental pseudo algoritmo void drawline(ponto ini, Ponto fim) //admitindo m < 1 e sem casos especiais { // Δy Δx double m = (fim.y - ini.y) / (fim.x - ini.x); double xi = ini.x; double yi = ini.y; while(xi < fim.x) { ++xi; yi = yi + m; setpixel(xi, Math.floor(0.5 + yi)); } } 19

Primitivas de rasterização linhas (5) Algoritmo incremental Este algoritmo apresenta alguns problemas, nomeadamente quando o declive é superior a 1 A resolução deste problema passa por tirar partido de simetrias existentes y x y y x x y é actualizado de m x x é actualizado de 1/m y 20

Primitivas de rasterização linhas (6) Algoritmo incremental Este algoritmo, bastante simples, tem alguns pontos menos bons, nomeadamente Por cada cíclo, é necessário fazer uma conversão de double para inteiro problemas de desempenho Embora as coordenadas de um pixel sejam inteiras, Y necessita de ser um número de vírgula flutuante pois m é uma fracção Objectivo Encontrar um algoritmo que use apenas aritmética de inteiros Motivação Aumento de desempenho 21

Primitivas de rasterização linhas (7) Algoritmo de Bresenham Este algoritmo foi proposto por Bresenham, utiliza apenas aritmética de inteiros, e vai incrementalmente calculando os pixeis que melhor se aproxima à recta ideal O autor demonstrou que o algoritmo minimiza o erro relativamente à recta ideal, cujo valor absoluto é sempre ½ A decisão de qual o pixel a iluminar resume-se a escolha um de dois possíveis E ou NE, escolhendo-se aquele que minimizar o erro Recta ideal P i = (x i, y i ) NE E P i +1= (x i +1, y i +1) ou P i +1= (x i +1, y i ) 22

Primitivas de rasterização linhas (8) Algoritmo de Bresenham A figura seguinte mostra as várias variáveis em jogo e o seu significado y+1 y+ε+m y+ε m ε+m y ε x x+1 Nas condições anteriores, escolhe-se o ponto E (x+1,y) se y m y 0,5 Caso contrário, escolhe-se NE (x+1,y+1) 23

Primitivas de rasterização linhas (9) Algoritmo de Bresenham Para que o algoritmo seja incremental, é necessário actualizar o valor do erro, de acordo com a decisão anterior, ou seja Se E (x+1,y), então Se NE (x+1,y+1), então y m y y m ( y 1) m 0,5 No entanto o teste utiliza aritmética de virgula flutuante Podemos efectuar uma manipulação algébrica de forma a passar para aritmética de inteiros 24

Primitivas de rasterização linhas (10) Se multiplicarmos ambos os lados por x e depois por 2 teremos m x 2x m x m x 0,5 y m x 0,5 Sabendo que fica 2 x y x Algoritmo de Bresenham Note-se que uma multiplicação por 2 pode ser implementada com um simples shift à esquerda 25

Primitivas de rasterização linhas (11) Continua a ser necessária aritmética de vírgula flutuante na actualização do erro m e m1 Algoritmo de Bresenham No entanto, multiplicando ambos os lados por x, temos x x y x x y x A notação pode ser simplificada, efectuando a substituição ' x fica ' 'y e ' 'y x 26

Primitivas de rasterização linhas (12) //Para o primeiro octante (0 <= m <= 1) void drawline(ponto ini,ponto fim) { int e = 0; int dx = fim.x - ini.x; int dy = fim.y - ini.y; int y = ini.y; for(int x = ini.x; x < fim.x; ++x) { setpixel(x, y); e += dy; if(2*e >= dx) { ++y; e -= dx; } } } Algoritmo de Bresenham 27

Primitivas de rasterização linhas (13) Atenção: o algoritmo apresentado apenas funciona para 0 m 1 e ini. x fim. x 3º y 1 <y 2-1> m > - 4º Algoritmo de Bresenham y 1 <y 2 2º 1< m < 1º x 2 <x 1 x 1 <x 2 0 m 1 0 m -1 (x 2, y 2 ) Os restantes casos são apresentados na figura x 2 <x 1 0 m 1 (x 1, y 1 ) x 1 <x 2 0> m -1 5º 6º y 2 <y 1 1< m < y 2 <y 1-1> m > - 7º 8º 28

Primitivas de rasterização linhas (14) Algoritmo de Bresenham Quando a direcção se altera, para que o algoritmo funcione basta trocar os pontos Quando o declive é superior a 1, basta trocar as variáveis de iteração, por exemplo, iterar em y em vez de x Para declives negativos é necessário deduzir as fórmulas, de acordo com a figura seguinte y Y-1 Y+ε ε Y+ε+m x x+1 m ε + m 29

Sumário Enquadramento Viewport vs window Rasterização de primitivas gráficas Linhas Círculos 30

Primitivas de rasterização círculos (1) y 2 R 2 = x 2 + y 2 R (0, 0 ) (x 2, y 2 ) 2 x Com y f (x) fica y R 2 x 2 3 2 Como o cálculo dos pontos na circunferência é ineficiente utilizando directamente a fórmula anterior, é necessário encontrar um algoritmo, que, à semelhança do que se fez para a recta, tente minimizar as operações com vírgula flutuante E claro, utilizar a natureza simétrica do círculo 31

Primitivas de rasterização círculos (2) Simetria do círculo (-x, y) (x, y) (-y, x) (-y, -x) R (0, 0 ) (y, x) (y, -x) (-x, -y) (x, -y) 32

Primitivas de rasterização círculos (3) //Para um círculo centrado na origem void writecirclepixel(int x, int y) { } writepixel( x, y); writepixel( y, x); writepixel( y, -x); writepixel( x, -y); writepixel(-x, -y); writepixel(-y, -x); writepixel(-y, x); writepixel(-x, y); Simetria do círculo Tirando partido da simetria dois 8 octantes, traçar um círculo resume-se a calcular os pontos do primeiro octante e, para cada um evocar a seguinte função 33

Primitivas de rasterização círculos (4) Algoritmo Midpoint Bresenham desenvolveu um algoritmo incremental para traçar círculos, que, à semelhança do seu algoritmo para linhas, traça os pontos garantindo a minimização do erro O algoritmo aqui apresentado é baseado nesse, mas utiliza o critério do ponto médio Tem como vantagem ser mais facilmente generalizável para cónicas em geral O algoritmo considera apenas 45º do circulo, no 2º octante onde 0 x R/ 2 34

Primitivas de rasterização círculos (5) P=(x p, y p ) E Algoritmo Midpoint M M E SE M SE Tendo o ponto P sido escolhido, numa iteração anterior, como sendo o mais próximo do círculo, o próximo ponto a escolhe será E (East) ou o SE (South- East), avaliando a função no ponto médio entre os dois - M 35

Primitivas de rasterização círculos (6) Defina-se a função F(x,y) como F 2 2 2 ( x, y) x y R Algoritmo Midpoint Esta função será F( x, y) 0 F( x, y) 0 F( x, y) 0 36

Primitivas de rasterização círculos (7) Algoritmo Midpoint É possível deduzir que o pixel mais próximo do circulo é o SE se o ponto M estiver fora do círculo Por analogia, E é o pixel mais próximo, se M estiver dentro do círculo Define-se então uma variável de decisão d, que representa o valor da função no ponto médio M d old F x p 1 1 1, y p p p R 2 2 2 2 x 1 y 2 37

Primitivas de rasterização círculos (8) d old 0 Vamos admitir que, tendo sido escolhido o pixel E. A próxima avaliação de d será Algoritmo Midpoint d new F x p 1 1 2, y p p p R 2 2 2 2 x 2 y 2 d d 2x 3 2x 3 Verifica-se que, ou seja new old p E p d old 0 Se escolhe-se o pixel SE, ficando 3 d new F x p 2, y p donde SE 2xp 2y p 5 2 38

Primitivas de rasterização círculos (9) Resta definir a condição inicial para d Algoritmo Midpoint Como o algoritmo se limita ao segundo quadrante, sabemos que o pixel inicial fica nas coordenadas (0, R) O próximo ficará em (1, R-½), logo F1, R 1 2 5 4 R Para eliminar as operações em vírgula flutuante, é possível efectuar um conjunto de manipulações algébricas 39

Primitivas de rasterização círculos (10) void drawcircle(int radius) { int x = 0; int y = radius; int d = 1 - radius; Algoritmo Midpoint } writecirclepixel(x, y); while(y > x) { if(d < 0) { // escolher E d += 2 * x + 3; } else { d += 2 * (x - y) + 5; --y; } ++x; writecirclepixel(x, y); } 40

Referências Computer Graphics: Principles and Practice in C, James D. Foley, Andries van Dam, Steven K. Feiner, John F. Hughes, Addison-Wesley Professional; 2nd edition (1995) The Bresenham Line-Drawing Algorithm, http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html, 2006 Equations of the Straight Line, http://www.cut-the-knot.org/curriculum/calculus/straightline.shtml, 2006 JAVA 2D API geral: http://java.sun.com/j2se/1.5.0/docs/api/ Applets: http://java.sun.com/docs/books/tutorial/deployment/applet/index.html Graphics: http://java.sun.com/j2se/1.5.0/docs/api/java/awt/graphics.html 41