DiscretizacióndePrimitivasGráficas ComputaciónGraficaFISI2011 II
description
Transcript of DiscretizacióndePrimitivasGráficas ComputaciónGraficaFISI2011 II
-
C.U. Viernes, 30 de Septiembre de 2011
Lic. John Ledgard Trujillo Trejo
Computacin Grfica
Primitive Graphs
Construction Construccin de Primitivas
Grficas
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Introduccin Arquitectura
Pixel
Representacin Grafica en un Dispositivo de Salida
Primitivas Grficas
Discretizacin
Discretizacin de Lneas (Segmento de recta) Algoritmo de recta simple Algoritmo DDA (Digital Diferential Analizer)
Algoritmo de Punto Medio (Bresenham)
Discretizacin de Circunferencias Simetra de la circunferencia
Algoritmo de fuerza bruta
Algoritmo basado en la representacin paramtrica Algoritmo de punto medio
AGENDA
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Introduccin
Representar figuras => iluminar pxeles apropiadamente
Ciertas primitivas son ms fciles de muestrear que otras
En una escena pueden haber miles de primitivas a dibujar => el rendimiento es esencial
Algunos paquetes grficos slo soportan ciertas primitivas => hay que reducirlo todo a ellas
Sistemas acelerados por Hardware.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Introduccin
Problema:
Los dispositivos raster son discretos y los objetos continuos
El dispositivo de salida es limitado
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Introduccin
Cmo convertir figuras continuas en su representacin discreta?
Muestreo o rasterizacin, filtrado y recortado =>
Perdida de informacin
Transformacin de informacin.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Arquitectura
Memoria de presentacin (Frame buffer) alineada en y
Es ms costoso multiplicar que sumar
Muchos procesadores trabajan ms rpido con aritmtica entera que en coma flotante
Hay que evitar dibujar dos veces la misma primitiva o el mismo pxel. Coherencia.
001010010101001
010010100010100
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Arquitectura
Memoria de representacin nxm puntos
La direccin d de un pxel de coordenadas enteras (x, y) es
d = x + my
Un punto matemtico no tiene rea Un pxel si
Los puntos son reales; los pxeles enteros
Representar pxeles requiere realizar al menos una traslacin un escalado y un redondeo...
0123456.m
1 0010100 ...01
2 0100101 ...00
. .
n 0110111 ...00
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Pixel
Un pixel (de las palabras inglesas picture element) es el
elemento direccionable ms pequeo de la pantalla.
Es la porcin ms pequea que podemos controlar.
Todos los pixel tienen un nombre o una direccin.
Los nombres que identifican a los pixel corresponden a las coordenadas que definen a los puntos. Esto es parecido a la forma de seleccionar los elementos de una matriz mediante subndices.
Las imgenes grficas creadas por ordenador se obtienen activando la intensidad y el color de los pixel que componen la pantalla.
Se dibujan segmentos dando brillo a un conjunto de pixel situados entre el pixel inicial y el pixel final.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Representacin Grafica en un Dispositivo de Salida
Sistema de Coordenadas Fsica:
Representacin matemtica de los objetos.
Independiente del Dispositivo.
Denominado Espacio Euclideano.
Valores infinitesimales Reales.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Representacin Grafica en un Dispositivo de Salida
Sistema de Coordenadas Maestras: Coordenadas de Modelado a coordenadas locales.
Definen la forma del objeto.
Sistema Individual, independiente para cada objeto.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Representacin Grafica en un Dispositivo de Salida
Sistema de Coordenadas Universales: Definen la posicin y orientacin de los objetos.
Espacio de la escena.
Sistema nico para todos los objetos.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Representacin Grafica en un Dispositivo de Salida
Sistema de Coordenadas Normalizadas: Coordenadas de dispositivos normalizadas.
Proyeccin bidimensional del objeto en base a la posicin y la orientacin de una hipottica cmara.
Rango de valores: entre -1 y 1 o entre 0 y 1.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Representacin Grafica en un Dispositivo de Salida
Sistema de Coordenadas de Dispositivo: Monitor: Coordenadas de pantalla.
Origen: Vrtice superior izquierdo.
Espacio de pantalla (pixels).
Discreto y acotado:
[0, Xmax] x [0, Ymax]
Xmax y Ymax N Valores enteros.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Representacin Grafica en un Dispositivo de Salida
Correspondencia entre espacio de pantalla y espacio Euclidiano:
X = Redondeo(x)
Y = Redondeo(y)
Donde: x e y son coordenadas del espacio Euclidiano.
X e Y son coordenadas del espacio pantalla.
(X, Y) N2
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Primitivas Grficas
Figuras bsicas mediante el cual se pueden construir
objetos complejos.
Puntos, segmentos de recta, circunferencia, polgonos.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Primitivas Grficas
Estas primitivas son llamadas muy frecuentemente, por lo que se hace imperativo la velocidad con que estas se ejecuten.
Para poder llevarse a cabo con una velocidad aceptable se deben evitar los clculos con nmeros flotantes que retarden el proceso y tratar de evitar las multiplicaciones sustituyndolas por sumas iterativas que son
de mucho menor costo.
Las primitivas grficas son funciones que ofrecen las
bibliotecas grficas para describir estructuras geomtricas
bsicas.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Primitivas Grficas: Punto
En la imagen" mental del usuario un punto normalmente
se representan en un espacio Euclidiano de una
determinada dimensin. En dichas condiciones un punto es
una entidad matemtica p = (x, y), donde (x, y) R2.
En el soporte aritmtico de la computadora, dicha representacin se efecta con los tipos de datos provistos, que pueden ser nmeros reales con punto flotante de simple o doble precisin (espacio de escena).
En el soporte grfico del bufer de pantalla, un punto se representa con un pixel, y dicha representacin se efecta seteando una posicin de memoria con un contenido dado (espacio pantalla).
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin
Es la operacin de llevar una primitiva del espacio
Euclideano (espacio de la escena) al espacio de pantalla.
Espacio Euclideano
(Coordenadas Fsicas) Espacio de pantalla
(Coordenadas de dispositivo)
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin
Proceso que aproxima las diferentes figuras geomtricas
con un conjunto de pixels (del ingles Scan-conversion o
rasterizacin).
El problema principal a tratar se basa en el estudio de primitivas grficas para la conversin de definiciones geomtricas continuas a un esquema discreto de pxeles, y la aproximacin necesaria para poder llevar a cabo la transformacin.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin
Especificaciones de una discretizacin:
Apariencia: Evitar discontinuidad o puntos espreos
Debe ser uniforme
Simetra e invarianza geomtrica: Producir resultados equivalentes si se modifican
algunas propiedades geomtricas de la primitiva.
Simplicidad y Velocidad de Computo: Evitar el uso de operaciones aritmticas complejas.
Evitar los errores de las operaciones aritmticas
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Cuestiones en dibujar lneas y curvas
Aproximando una curva continua con un nmero finito de puntos en posiciones fijas.
Haciendo el algoritmo tan rpido como sea posible.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Reduciendo Muchos Problemas a Uno
Comience con cualquier segmento dirigido de la lnea.
Transformar en un segmento del origen en el primer octante.
Llevar la cuenta de las transformaciones usadas.
Dibujar la lnea en el primer octante.
Pero ejerza transformaciones en orden inverso antes de sacar cada punto.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Reduciendo Muchos Problemas a Uno
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Reduciendo Muchos Problemas a Uno
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Reduciendo Muchos Problemas a Uno
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Reduciendo Muchos Problemas a Uno
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Reduciendo Muchos Problemas a Uno
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Reduciendo Muchos Problemas a Uno
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
La recta es la lnea ms corta que une dos puntos y el lugar
geomtrico de los puntos del plano (o el espacio) en una
misma direccin.
Si conocemos dos puntos de la recta, P1(x1,y1) y P2(x2, y2), la pendiente es:
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Ecuacin de la recta punto pendiente
La ecuacin general de la recta es de la
siguiente forma:
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
y = mx + b Ecuacin de la recta punto pendiente
donde m = y / x es la pendiente de la recta
b = -mx0+ y0
Para lml < 1, la lnea es mas horizontal que vertical.
Si m 0 la lnea tiende a ser horizontal
Para lml > 1, la lnea es mas vertical que horizontal.
Si m la lnea tiende a ser vertical
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Para dibujar lneas rectas, hay que calcular las posiciones intermedias entre los dos extremos
Este problema no exista en las pantallas vectoriales o plotters
Las posiciones de los pixels son valores enteros, y los puntos obtenidos de la ecuacin son reales, entonces existe un error (aliasing)
A menor resolucin, mayor es el efecto
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Hay que calcular las coordenadas de los pixels que estn lo ms cerca posible de una lnea recta ideal, infinitamente delgada, superpuesta sobre la matriz de pixels.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Consideraciones para la discretizacin de lneas
La secuencia de pixels debe ser lo ms recta posible.
Las lneas deben dibujarse con el mismo grosor e intensidad independiente de su inclinacin
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo de recta simple
La ecuacin de una recta es y = mx + b
Donde m es la pendiente de la recta
b es el corte con el eje y
Para un valor determinado xi
obtenemos yi = m xi + b
pintamos el pixel (xi , round(yi))
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo de recta simple
void recta_simple (int x0, int y0, int x1, int y1) {
int x, y; float dx, dy, m; dx = x1 - x0; dy = y1 - y0; m = dy/dx; b = y0 - m*x0; y = y0; for (x=x0; x
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo de recta simple
No es muy eficiente
Cada paso requiere una multiplicacin
flotante, una suma y un redondeo.
Acumulacin de errores
Producto
Suma
Redondeo
Es valido si la coordenada del primer
extremo de la recta es menor que la del
segundo extremo: x0 < x1
Solo funciona bien con pendientes
pequeas, con pendientes mas altas deja
huecos indeseables.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo DDA (Digital Diferential Analizer)
Caso 1: m < 1
Sea xi yi = m xi + b
Para xi+1 tambien yi+1 = m xi+1 + b
Sabemos que x = xi+1 - xi
xi+1 = xi + xi
Reemplazando yi+1 = m(xi + xi) + b
yi+1 = mxi + b + mxi
yi+1 = yi + mxi
Haciendo que x = 1 xi+1 = xi + 1
y yi+1 = yi + m
En general:
xi + 1 = xi + 1
yi+1 = yi + m tal que m = y/ x
Pintar (xi + 1 , round(yi+1 ))
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo DDA (Digital Diferential Analizer)
Caso 2: m > 1
haciendo y = 1 yi+1 = yi + 1
tambien yi+1 = m xi+1 + b
reemplazando yi + 1= m xi+1 + b
(yi + 1)/m= xi+1 + b/m
xi+1 = yi /m - b/m + 1/m
Por tanto xi+1 = xi + 1/m
En general:
yi + 1 = yi + 1
xi+1 = xi + 1/ m tal que m = y/ x
Pintar (xi + 1 , round(yi+1 ))
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo DDA (Digital Diferential Analizer)
void recta_dda(int x0, int y0, int x1, int y1) {
int x; float dx, dy, m, y; dx = x1-x0; dy = y1-y0; m = dy/dx; y = y0; for(x=x0; x
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo DDA (Digital Diferential Analizer)
Tiene mayor precisin
El algoritmo discretiza lneas eliminando la multiplicacin dentro del bucle, pero an emplea aritmtica en coma flotante.
Acumulacin de errores
Suma repetida de m
Redondeo
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo de Punto Medio (Bresenham)
Solo emplea aritmtica entera
Calcula el pixel (xi+1 , yi+1 ) a partir de (xi , yi )
Supongamos el caso de 0 < m < 1
Punto extremo inferior: (x0 , y0)
Punto extremo superior: (x1 , y1)
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo de Punto Medio (Bresenham)
Sea L: F(x, y) = Ax + By +C ecuacin general de la recta.
Sea P(x0 , y0) un punto cualesquiera, entonces:
i) Si F(x0 , y0) =0 P(x0 , y0) L
ii) Si F(x0 , y0) > 0 P(x0 , y0) se encuentra debajo de la recta
iii) Si F(x0 , y0) < 0 P(x0 , y0) se encuentra encima de la recta
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
1 1
Discretizacin de Lneas (Segmento de recta)
Algoritmo de Punto Medio (Bresenham)
NE: Pixel en direccin Nor Este
E : Pixel en direccin Este
Q : Punto perteneciente a la recta
M : punto medio entre pixels NE y E
NE = (xi + 1, yi + 1)
E = (xi + 1, yi )
Q = (x , y) L
M = (xi + 1, yi + )
NE
E
M Q
(xi , yi)
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo de Punto Medio (Bresenham)
De la ecuacin de la recta: y = mx + b
y = y/x x + b
y x - x y + x b = 0
F(x, y) = y x - x y + x b = 0 (x, y) L
Donde A = y , B = - x , C = xb
Se trata de elegir entre los pixels NE y E, esto depender del valor
numrico de F(x, y) en el punto medio entre NE y E.
d = F(M) donde M = (xi + 1, yi + )
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo de Punto Medio (Bresenham)
i) Si d = F(M) > 0, entonces M se encuentra debajo de la recta y el
punto NE se encuentra ms prxima a la recta.
ii) Si d = F(M) < 0, entonces M se encuentra encima de la recta y el
punto E se encuentra ms prxima a la recta.
iii) Si d = F(M) = 0, entonces se puede elegir cualquiera.
NE
E
M
F(M) > 0
NE
E
M F(M) < 0
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo de Punto Medio (Bresenham)
Caso 1: Cuando elegimos a E:
dnuevo = F (xi + 2, yi + )
dnuevo = A(xi + 2) + B(yi + ) + C
d = F(xi + 1, yi + )
d = A(xi + 1) + B(yi + ) + C
Restando dnuevo y d:
dnuevo d = A
El incremento que se usa despues
de elegir E se denomina E y su
valor es:
E = dnuevo d = A = y
M = (xi + 2, yi + )
E
M
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo de Punto Medio (Bresenham)
Caso 2: Cuando elegimos a NE:
dnuevo = F (xi + 2, yi + 3/2 )
dnuevo = A(xi + 2) + B(yi + 3/2 ) + C
d = F(xi + 1, yi + )
d = A(xi + 1) + B(yi + ) + C
Restando dnuevo y d:
dnuevo d = A + B
El incremento que se usa despues
de elegir NE se denomina NE y su
valor es:
NE = dnuevo d = A+B = y - x
M = (xi + 2, yi + 3/2)
M
NE
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo de Punto Medio (Bresenham)
Para dinicial :
dinicial = F(x0 + 1, y0 + )
dinicial = A(x0 + 1) + B(y0 + ) + C
dinicial = Ax0 + By0 + C + A + B/2
dinicial = F(x0 , y0 ) + A + B/2
Pero F(x0 , y0 ) L F(x0 , y0 ) = 0
dinicial = A + B/2
dinicial = y - x/2
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo de Punto Medio (Bresenham)
Para eliminar la divisin por 2 se redefine F(x, y)
multiplicndolo por 2, lo cual no afecta el signo de la variable
de decisin:
F(x, y) = 2y x - 2x y + 2x b = 0 (x, y) L
Por tanto: dinicial = 2y - x
Tambin: E = 2y
NE = 2(y - x)
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Lneas (Segmento de recta)
Algoritmo de Punto Medio (Bresenham) void recta_punto_medio(int x0, int y0, int x1, int y1) {
int dx, dy, dE, dNE, d, x, y; dx = x1 - x0; dy = y1- y0; d = 2*dy - dx; dE = 2*dy; dNE = 2*(dy - dx); x = x0; y = y0; pintar(x, y, atributo); while (x < x1) {
if(d
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Circunferencias
La ecuacin de una circunferencia con centro en
(x0 , y0) es:
(x - x0)2 + (y - y0)
2 = R2
Donde R es el radio de la circunferencia.
Restringiremos el estudio de la circunferencia
con centro en el origen de coordenadas:
x 2 + y 2 = R 2
Una primera aproximacin para discretizar una
circunferencia es resolver la ecuacin:
Y = (R 2 - x 2)1/2 x Z y 0 x R
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Para dibujar la circunferencia Es posible tambin reducir el
clculo al considerar la simetra de las circunferencias.
Incluso el primer octante es simtrico al segundo con respecto
a la recta y = x.
Simetra de la circunferencia
Discretizacin de Circunferencias
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Dibujando slo el segundo octante, desde x = 0 hasta x = y
podemos pintar todo el crculo
Simetra de la circunferencia
Discretizacin de Circunferencias
void pintar_circunferencia (int x, int y, int atributo); {
pintar (x, y, atributo); pintar (y, x, atributo); pintar (y, -x, atributo); pintar (x, -y, atributo); pintar (-x, -y, atributo); pintar (-y, -x, atributo); pintar (-y, x, atributo); pintar (-x, y, atributo);
}
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Usamos la ecuacin: Y = (R 2 - x 2)1/2 x Z
Para el primer octante: 0 x R
Algoritmo de fuerza bruta
Discretizacin de Circunferencias
En general:
xi + 1 = xi + 1
yi+1 = (R 2 xi+1 2)1/2
Pintar (xi + 1 , round(yi+1 ))
A medida que los valores de xi se acercan a R los pixels
pintados (xi, yi) sern muy discontnuos.
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Se divide el primer cuadrante en dos partes (octantes).
Algoritmo de fuerza bruta
Discretizacin de Circunferencias
En general:
xi < yi
xi+1 = xi + 1
yi+1 = (R 2 xi+1 2)1/2
Pintar (xi + 1 , round(yi+1 ))
void circunferencia_fuerza_bruta (int R) {
float x = 0,y = R; while (x < y) {
y = sqrt(pow(R,2)-pow(x,2)); pintar (x, round(y),atributo); x = x + 1;
} }
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Algoritmo de fuerza bruta
Discretizacin de Circunferencias
No es nada eficiente
Cada paso requiere una raz cuadrada
El espaciado entre pixels no es uniforme
Demasiado costo computacional
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Se usa las siguientes ecuaciones:
x = R cos
y = R sen donde 0 90
Algoritmo basado en la representacin paramtrica
Discretizacin de Circunferencias
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Circunferencias
Los cuadrantes II, II y IV
se obtienen por simetra de
la circunferencia respecto
al origen.
El valor del incremento del
ngulo debe ser lo suficientemente pequeo
para evitar los huecos
Uso de funciones
trigonomtricas
Demasiado costo
computacional
void circunferencia_parametrica(int R) {
float x,y; float PI=3.1415..; float teta=PI/4; delta=0.1; while (teta
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Circunferencias
Algoritmo de punto medio
Sea la ecuacin de la circunferencia con centro en el origen de
coordenadas (0, 0):
x 2 + y 2 = R 2 , R: radio de la circunferencia
Comenzamos a pintar en el punto (0, R) y se va desde
X =0 hasta x = y, donde la pendiente va de 0 a -1
Sea C: F(x, y) = x 2 + y 2 - R 2 = 0 ecuacin general de la de la
circunferencia.
Sea P(x0 , y0) un punto cualesquiera, entonces:
i) Si F(x0 , y0) =0 P(x0 , y0) C
ii) Si F(x0 , y0) > 0 P(x0 , y0) se encuentra fuera de la C
iii) Si F(x0 , y0) < 0 P(x0 , y0) se encuentra dentro de la C
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Circunferencias
Algoritmo de punto medio
Queremos pasar del pixel (xi , yi ) al pixel (xi+1 , yi+1)
E: Pixel en direccin Este
SE : Pixel en direccin Sur Este
Q : Punto perteneciente a la circunferencia
M : punto medio entre pixels E y SE
E = (xi + 1, yi )
SE = (xi + 1, yi -1)
Q = (x , y) C
M = (xi + 1, yi - )
E
SE
M
Q
P (xi, yi)
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Circunferencias
Algoritmo de punto medio
Se trata de elegir entre los pixels E y SE, esto
depender del valor numrico de F(x, y) en el
punto medio entre E y SE.
d = F(M) donde M = (xi + 1, yi - )
i) Si d = F(M) > 0, entonces M se encuentra fuera
de la circunferencia y el punto SE se encuentra
ms prximo a la circunferencia.
ii) Si d = F(M) < 0, entonces M se encuentra
dentro de la circunferencia y el punto E se
encuentra ms prxima a la circunferencia.
iii) Si d = F(M) = 0, entonces se puede elegir
cualquiera.
E
SE
M
F(M) > 0
E
SE
M
F(M) < 0
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Circunferencias
Algoritmo de punto medio
Los valores de M y d para el siguiente punto depende de la eleccin de E o SE.
Caso 1: Cuando elegimos a E:
dnuevo = F (xi + 2, yi - )
dnuevo = (xi + 2) 2 + (yi ) 2 - R 2
d = F(xi + 1, yi - )
d = (xi + 1) 2 + (yi ) 2 - R 2
Restando dnuevo y d:
dnuevo d = 2xi + 3
El incremento que se usa despues de elegir E se denomina E y
su valor es:
E = dnuevo d = A = 2xi + 3
M
M = (xi + 2, yi - )
E = (xi + 1, yi )
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Circunferencias
Algoritmo de punto medio
Caso 2: Cuando elegimos a SE:
dnuevo = F (xi + 2, yi 3/2 )
dnuevo = (xi + 2) 2 + (yi 3/2) 2 - R 2
d = F(xi + 1, yi - )
d = (xi + 1) 2 + (yi ) 2 - R 2
Restando dnuevo y d:
dnuevo d = 2xi - 2yi +5
El incremento que se usa despues de elegir
SE se denomina SE y su valor es:
SE = dnuevo d = 2xi - 2yi +5
M = (xi + 2, yi + 3/2)
M
SE = (xi + 1, yi + 1)
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Circunferencias
Algoritmo de punto medio
Para dinicial el punto de partida es (0, R):
dinicial = F(0 + 1, R - ) = F(1, R - )
dinicial = (1) 2 + (R ) 2 - R 2
dinicial = 5/4 R
Por tanto: dinicial = 5/4 R
Tambin: E = 2xi + 3
SE = 2xi 2yi + 5
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Circunferencias
Algoritmo de punto medio
void circunferencia_punto_medio(int R) {
// discretizacion valida en el II octante int x=0, y=R; float d=5/4-R; pintar(x,y,atributo); while (x
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discretizacin de Elipses
Algoritmo de punto medio
Planteamiento similar al despliegue de una
circunferencia.
i) Se determina los puntos (x, y) para una elipse en
posicin estndar centrada en el origen.
X2 /rx 2 + y2 /ry 2 = 1
ii) La pendiente de la curva (la tangente) se calcula a
partir de la ecuacin
En la frontera entre la regin 1 y la regin 2 dy/dx = - 1
(dy/dx < -1 en la regin 1 y dy/dx > -1 en la regin 2),
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Bibliografa
1. Computer Graphics: Principles and Practice. Foley J., Van Dame A.,
Feiner S., Hughes J., Phillips R. Addison Wesley Publishing Company, Massachusetts. 1996
2. Fundamentals of Computer Aided Geometric Design. Hoschek J.,
Lasser D. A.K. Peters Ltd. Wellesley Massachusetts. 1993
3. Grficas por computadora. Hearn D., Baker M.P. Prentice - Hall
Hispanoamericana. 1998
-
30-sep-11 Lic. John Ledgard Trujillo Trejo
Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica
Discusin, preguntas...
Viernes, 30 de Septiembre de
2011