DiscretizacióndePrimitivasGráficas ComputaciónGraficaFISI2011 II

download DiscretizacióndePrimitivasGráficas ComputaciónGraficaFISI2011 II

of 69

description

Computacion grafica

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