+ All Categories
Home > Documents > Graficación -...

Graficación -...

Date post: 28-Nov-2019
Category:
Upload: others
View: 5 times
Download: 0 times
Share this document with a friend
84
Graficación Garibaldi Pineda García [email protected]
Transcript
Page 1: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Graficación

Garibaldi Pineda García

[email protected]

Page 2: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Requisitos

● Álgebra lineal– Multiplicación de matrices

– Operaciones con vectores

● Programación II – Java con netbeans

● OpenGL (se enseña en clase)● Habilidades de visualización

Page 3: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Organización de clase

● Exámenes ● Tareas● Proyecto final

Page 4: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Dinámica

● Se explica el algoritmo en clase● Se resuelven dudas, ¡TODAS!● Se pide al alumno implementar el

algoritmo de tarea

Page 5: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Entrega de reportes

● Las tareas de investigación se escriben a mano

● Para las tareas de implementación, se entrega el código por correo y un video/pantallazos de prueba

Page 6: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Bibliografía

● Gráficos por computadora con OpenGL. Hearn/Baker. Prentice Hall, 2006.

● Computer Graphics: Principles and Practice. Foley et al. Addison-Wesley, 1995.

● 3D Computer Graphics. Alan Watt. Addison-Wesley, 2000.

Page 7: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Introducción

¿Qué es la graficación por computadora?

Entrada Procesamiento Salida

Page 8: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Introducción

¿Qué es la graficación por computadora?

Modelo(puntos, vértices/ejes,triángulos,ecuaciones)

Procesamiento

Impresiones,Pantallas (2D),VR/3D,RA

Page 9: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Introducción

En nuestro caso

vértices/ejes,ecuaciones

Procesamiento Pantallas (2D)

Page 10: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Introducción

y=sqrt(r*r-x*x) Procesamiento

Page 11: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

¿Qué campos abarca?

● Juegos!!!

Page 12: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

¿Qué campos abarca?

● Juegos!!!

Page 13: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

¿Qué campos abarca?

● Juegos!!!

Page 14: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

¿Qué campos abarca?

● Juegos!!!

Page 15: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

¿Qué campos abarca?

● Juegos!!!

Page 16: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

¿Qué campos abarca?

● Medicina

Page 17: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

¿Qué campos abarca?

● Medicina

Page 18: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

¿Qué campos abarca?

● Películas

Page 19: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

¿Qué campos abarca?

● Realidad Virtual

Page 20: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

¿Qué campos abarca?

● Realidad Aumentada

Page 21: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

¿Qué campos abarca?

● Visualización científica

Page 22: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Paso a pasito

● Los gráficos complejos se construyen a partir de elementos simples

● Los elementos simples se llaman primitivas de graficación

Page 23: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Primitivas

● Puntos● Líneas● Polígonos

– triángulos, rectángulos y otros

● Círculos y elipses● Curvas splines

Page 24: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Primitivas

● Se conocen las ecuaciones que las representan

● Sus coordenadas son fáciles de calcular

● Se han estudiado optimizaciones

Page 25: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

El problema inicial

● La mayoría de los modelos (ecuaciones, puntos, etc.) están en un espacio de Reales

● La mayoría de las salidas son discretas, generalmente en un espacio de Naturales

● Tenemos que calcular el natural que le corresponde a cierto real

Page 26: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

El problema inicial

0, 0

n,m

Page 27: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

El problema inicial

0, 0

n,m

Page 28: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de líneas

● Aproximación inicial con la fórmula punto pendiente

yi = mx

i + B

m = (yf – y

0)/(x

f – x

0)

● Se usa multiplicación de punto flotante (lento)

Page 29: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de líneas

● Podemos eliminar la multiplicación si observamos que

yi+1

= mxi+1

+ B= m(xi + Dx) + B

yi+1

= m(xi + 1) + B = (mx

i + B) + m

yi+1

= yi + m

Page 30: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de líneas

● Algoritmo de punto medio

yi = (Dy/Dx)x

i + B

F(xi , y

i) = (Dy)x

i - (Dx)y

i + (Dx)B

F(xi , y

i) = ax

i + by

i + c

● F(x, y) es igual a 0 en los puntos de la línea, positivo si el punto está abajo de la línea y negativo si está arriba de la línea

Page 31: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de líneas

● Algoritmo de punto medio

Xp, Yp E

NE

Q

Page 32: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de líneas

● Algoritmo de punto medio● Se evalúa

● Si d es igual a 0 o menor a 0, entonces pintamos el pixel E

● Si d es mayor a 0, entonces pintamos el pixel NE

F (xi+1, yi+12)

d=F (xi+1, y i+12)=a (xi+1)+b( y i+

i2)+c

Page 33: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de líneas

● Para calcular el primer factor de decisión

d 0=a (x0+1)+b( y0+12)+c=(ax+by+c)+a+ 1

2b

d 0=a+12b

Page 34: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de líneas

● Algoritmo de punto medio

● Actualizamos el valor de d, si escogimos el pixel al Este

d nuevo=F (xi+2, y i+12)=a (xi+2)+b( yi+

12)+c

d nuevo=[a (xi+1)+b( yi+12)+c]+a

d nuevo=d viejo+a

Page 35: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de líneas

● Algoritmo de punto medio

● Actualizamos el valor de d, si escogimos el pixel al Nor-Este

d nuevo=F (xi+2, y i+32)=a (xi+2)+b( yi+

32)+c

d nuevo=[a (xi+1)+b( yi+12)+c]+a+b

d nuevo=d viejo+a+b

Page 36: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de líneas

● Algoritmo de punto medio

● En resumen

d i=d i−1+2(a+b)

a=( y f− yo) b=−(x f−xo)d 0=2a+b

d i=d i−1+2aPixel i-1 fue Este

Pixel i-1 fue Nor-Este

Page 37: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

● Se parte de la ecuación clásica de la circunferencia

x2+ y2=r2

● Se evalúa una y para cada x

y=√r2−x2

● Aproximación inicial

Page 38: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos● El problema es que se tienen resultados

incorrectos en algunas secciones del círculo

● Se puede evitar si se aprovecha la simetría del círculo

● El gran problema es el uso de raíz cuadrada

Page 39: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

● Se parte de la ecuación clásica de la circunferencia

x2+ y2=r2

● Se transforma a una función de x y y, para obtener un factor de decisión

d=F (x , y )=x2+ y2−r2

● Método del punto medio

Page 40: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

● El valor de d puede ser de tres maneras:

– Igual a 0 cuando (x, y) está en la circunferencia

– Menor a 0 cuando (x, y) está dentro del círculo

– Mayor a 0 cuando (x, y) está fuera del círculo

Page 41: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

● Se debe tener en cuenta que, el círculo es simétrico respecto a ejes que pasen por su centro

● En este caso se aprovecha que es simétrico respecto a cuatro ejes

Page 42: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

● Comenzaremos en el punto (0, r)

● Se calculan los pixeles para el primer octante

● El algoritmo termina cuando x = y

● Se reutilizan los cálculos para todos los octantes

Page 43: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

● Por ejemplo, el círculo de radio 8

Page 44: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

● Para calcular el factor de decisión del pixel i+1, se calcula d para el punto x

i+1, y

i + 1/2

● Se avanza con un incremento de 1 en el eje x y -1 en el eje y

d i=F (xi+1, y i−12)=(x+1)2+( y− 1

2)

2

−r2

Page 45: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

● Una vez calculado un factor de decisión, se podrá elegir un pixel a la derecha (Este) o abajo y a la derecha (Sur-Este)

– Si el siguiente punto medio está dentro del círculo (d < 0), entonces se escoge el punto al Este

– Si el siguiente punto medio está fuera del círculo (d => 0), entonces se escoge el punto al Sur-Este

Page 46: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

(x+1, y+1/2)

(x+2, y+3/2)

(x+2, y+1/2)

Page 47: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

d 0=F (x0+1, y0−12)=(x0+1)2+( y0−

12)

2

−r2

● Para el primer factor de decisión

d 0=[ x02+ y0

2−r2]+2x0− y0+54

● Como x0 = 0 y y

0 = r

d 0=54−r

Page 48: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

d i+1=F (xi+2, yi−12)=(xi+2)2+( y i−

12)

2

−r2

● Al igual que en el caso de las líneas, se busca calcular los siguientes factores de decisión en base a los anteriores

● Si se escogió el pixel del Este

d i+1=d i+2 xi+3

d i+1=[(xi+1)2+( y i−12)

2

−r2]+2 xi+3

Page 49: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

d i+1=F (xi+2, yi−32)=(xi+2)2+( y i−

32)

2

−r2

● Si se escogió el pixel del Sur-Este

d i+1=(xi+1)2+2 xi+3+( y i−12)

2

−2 yi+84−r2

d i+1=d i+2(xi+ yi)+5

d i+1=[(xi+1)2( yi−12)

2

−r2]+2 xi−2 yi+5

Page 50: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

● En resumen

d i+1=d i+2(xi+ yi)+5

d i+1=d i+2 xi+3

d 0=54−r

● Si d < 0, se escoge el pixel al Este y se recalcula d

● Si d => 0, se escoge el pixel al Sur-Este y se recalcula d

Page 51: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de círculos

● Ejemplo, círculo de radio 8

d i+1=d i+2(xi+ yi)+5d i+1=d i+2 xi+3

d 0=54−r= 5

4−8=−27

4

● x0 = 0, y0 = 8

Page 52: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● La ecuación de la elipse es

(x−xc)2

Rx2 +

( y− yc)2

R y2 =1

● La aproximación más simple es despejar y y evaluar para diferentes x

y=√R y2− R y2Rx2 (x−xc)2+ yc

Page 53: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● Existe una variante del método de punto medio para elipses

(x−xc)2

Rx2 +

( y− yc)2

R y2 =1

● Se cambia la ecuación a una función de x y y, para obtener un factor de decisión (suponiendo que está centrada en el origen)

F (x , y)=R y2 x2+Rx

2 y2−Rx2 R y

2

Page 54: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● Se inicia en el punto (0, Ry) y se avanza con un paso horizontal de 1

● Se cambia a un paso vertical de 1 a la “mitad” de la elipse

Page 55: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● Para conocer el punto donde cambia el paso de x a y, se obtiene el gradiente de F(x,y)

∇ F (x , y)=∂ F (x , y)

∂ xi+

∂F (x , y)∂ y

j=2R y2 x i+2Rx

2 y j

Page 56: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● Cuando la pendiente del vector gradiente es igual a 1, entonces se está en el punto de inflexión buscado

Rx2 y>R y

2 x

● Ya en la práctica, el cambio de zona se da cuando

Rx2 y=R y

2 x

Page 57: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● El factor de decisión será

– Menor a 0, si el punto está dentro de la elipse, por lo que se escoge el pixel al Este

– Igual a 0, si el punto está sobre la elipse, se escoge el punto al Sur-Este

– Mayor a 0, si el punto está afuera de la elipse, por lo tanto se escoge el pixel Sur-Este

F (x , y)=R y2 x2+Rx

2 y2−Rx2 R y

2

● Para la zona 1 (incrementos fijos en x)

Page 58: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● Para la zona 1 (incrementos fijos en x)

● Se evalúa la función F(x,y) en el punto

(x+1, y-1/2)

F (x+1, y−12)=R y

2 (x+1)2+Rx2( y− 1

2)

2

−Rx2 R y

2

Page 59: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● Para el punto (0,Ry)

F (x0+1, y0−12)=R y

2 (x0+1)2+Rx2( y0−

12)

2

−Rx2 R y

2

F (x0+1, y0−12)=R y

2+Rx2(R y

2−R y+14)−Rx

2 R y2

F (x0+1, y0−12)=R y

2−Rx2 R y+

Rx2

4=R y

2+Rx2(1

4−R y)

Page 60: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● Los factores de decisión sucesivos se calculan en función de los anteriores

● Para el caso en que el pixel anterior fue Este

F (xi+2, y i−12)=R y

2 (xi+2)2+Rx2( yi−

12)

2

−Rx2 R y

2

d nuevo=R y2 (xi+1)2+R y

2 (2 xi+3)+Rx2( yi−

12)

2

−Rx2 R y

2

d nuevo=d viejo+R y2 (2 xi+3)

Page 61: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● Cuando el pixel anterior fue el Sur-Este

F (xi+2, y i−32)=R y

2 (xi+2)2+Rx2( yi−

32)

2

−Rx2 R y

2

d nuevo=R y2 (xi+1)2+R y

2 (2 xi+3)+R x2( y i−

12)

2

+Rx2(−2 y+2)−Rx

2 R y2

d nuevo=d viejo+R y2 (2 xi+3)+2 Rx

2(1− y)

Page 62: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● Para la zona 2 (incrementos fijos en y)

● Se evalúa la función F(x,y) en el punto medio

(x+1/2, y-1)

F (x+ 12,y−1)=R y

2 (x+ 12)

2

+Rx2( y−1)2−Rx

2 R y2

● Esta misma función se utiliza para conocer el factor de decisión inicial de la segunda región

Page 63: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● El factor de decisión será

– Menor a 0, si el punto está dentro de la elipse, por lo que se escoge el pixel al Sur-Este

– Igual a 0, si el punto está sobre la elipse, se escoge el punto al Sur

– Mayor a 0, si el punto está afuera de la elipse, por lo tanto se escoge el pixel Sur

● Para la zona 2 (incrementos fijos en y)

Page 64: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● Si el pixel anterior fue el del Sur

F (x+ 12,y−2)=R y

2 (x+ 12)

2

+Rx2( y−2)2−Rx

2 R y2

d nuevo=R y2 (x+ 1

2)

2

+Rx2 ( y−1)2−Rx

2 R y2+Rx

2 (−2 y+3)

d nuevo=d viejo+Rx2(−2 y+3)

Page 65: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Conversión de elipses

● Si el pixel anterior fue el del Sur-Este

F (x+ 32,y−2)=R y

2 (x+ 32)

2

+Rx2( y−2)2−Rx

2 R y2

d nuevo=R y2 (x+ 1

2)

2

+Rx2( y−1)2−Rx

2 R y2+R y

2 (2 x+2)+R x2(−2 y+3)

d nuevo=d viejo+2 R y2 (x+1)+Rx

2 (3−2 y)

Page 66: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines● Su origen son plantillas de dibujo usadas

en el diseño automotriz

● Existen dos tipos:

– Aproximación (no pasan por los puntos de control)

– Interpolación (si pasan por los puntos de control)

Page 67: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines● En las splines de aproximación, los

puntos de control definen un polígono que envuelve a la curva

● En las splines de interpolación, el polígono no necesariamente envuelve completamente a la curva

Page 68: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines

● Existen diferentes condiciones de continuidad entre las fronteras de los segmentos de las curvas

● Continuidad Paramétrica. Si la derivada al final de un segmento es IGUAL a la del inicio del siguiente segmento

Page 69: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines

● Dependiendo del grado de la derivada se conocen como C0, C1, C2

Page 70: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines

● Continuidad Geométrica. Si la derivada al final de un segmento es PROPORCIONAL a la del inicio del siguiente segmento

● Dependiendo del grado de la derivada se conocen como G0, G1, G2

Page 71: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Hermite

● Son del tipo interpolado

● Permiten control local, sólo los puntos de control locales afectan la forma de la gráfica

Page 72: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Hermite

● Sea P(u) la representación paramétrica de una curva

● Y su derivada

P (u)=au3+bu2+cu+d

P ' (u)=3au2+2bu+c

Page 73: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Hermite

● Para la Spline de Hermite se tienen las siguientes restricciones:

P (0)= p0

P (1)= p1

P ' (0)=Dp0

P ' (1)=Dp1

Page 74: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Hermite

● De las restricciones anteriores y la definición de la curva y su derivada

P (0)= p0=a (03)+b(02)+c (0)+d=d

P (1)= p1=a (13)+b(12)+c(1)+d=a+b+c+d

P ' (0)=Dp0=3a (02)+2b(0)+c=c

P ' (1)=Dp1=3a (12)+2b(12)+c=3a+2b+c

Page 75: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Hermite

● Si se reacomoda en forma matricial

[ p0

p1

Dp0

Dp1]= [ 0 0 0 1

1 1 1 10 0 1 03 2 1 0

] [ abcd

]

Page 76: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Hermite

● La especificación de la curva viene dada por sus puntos y los vectores tangentes, por lo que habrá que “despejar” la matriz [a, b, c, d]T

[ abcd

]= [ 2 −2 1 1−3 3 −2 −10 0 1 01 0 0 0

] [ p0

p1

Dp0

Dp1]

Page 77: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Hermite

● Una vez calculados las constantes a, b, c y d, se forma la curva paramétrica multiplicando las constantes por el parámetro u

P (u)=[u3 u2 u 1] [ 2 −2 1 1−3 3 −2 −10 0 1 01 0 0 0

] [ p0

p1

Dp0

Dp1]

Page 78: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Hermite

● Al multiplicar las matrices tenemos la siguiente función

P (u)= p0(2u3−3u2+1)+ p1(−2u3+3u2)

+Dp0(u3−2u2+u)+Dp1(u

3−u2)

P (u)= p0H 0(u)+ p1H 1(u)+Dp0H 2(u)+Dp1H 3(u)

Page 79: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Hermite

● Finalmente tendremos que evaluar la ecuación paramétrica en u, con un rango de [0, 1]

● Por ejemplo, para 0.1

P (u)= p0H 0(u)+ p1H 1(u)+Dp0H 2(u)+Dp1H 3(u)

P (0.1)= p0H 0(0.1)+ p1H 1(0.1)+Dp0H 2(0.1)+Dp1H 3(0.1)

P (0.1)= p0(2(0.1)3−3(0.1)2+1)+ p1(−2(0.1)3+3(0.1)2)

+Dp0((0.1)3−2(0.1)2+0.1)+Dp1((0.1)3−(0.1)2)

Page 80: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Bézier

● Las splines de Hermite se definen en términos de vectores tangentes, son poco intuitivas

● Las splines de Bézier se definen mediante, al menos, dos puntos de control (recta)

● Por su simplicidad son muy populares y aparecen en muchos paquetes de dibujo y de pintura

Page 81: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Bézier

Page 82: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Bézier

● Se definen mediante funciones base

● La curva paramétrica será la suma

Bk ,n(u)

P (u)=∑k=0

n

pk Bk , n(u)

Page 83: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Bézier

● Las funciones base se definen

Bk ,n(u)=(nk )uk (1−u)n−k

● Para cuatro puntos de control

B0,3(u)=(1−u)3 B1,3(u)=3u (1−u)2

B2,3(u)=3u2(1−u) B2,3(u)=u3

Page 84: Graficación - dep.fie.umich.mxdep.fie.umich.mx/~garibaldi/data/uploads/graficacion/presentacion_graficacion... · – Java con netbeans OpenGL (se enseña en clase) Habilidades de

Splines de Bézier

● Finalmente, la curva con cuatro puntos de control se calcularía

P (u)= p0(1−u)3+ p1 (3u (1−u)2 )+ p2 (3u2(1−u) )+ p3u3


Recommended