74
GRAFICACIÓN Unidad I Profr. Hilario Salazar Martínez OBJETIVO ESPECIFICO: El alumno aprenderá a relacionar los conceptos básicos de geometría analítica con los conceptos iniciales de graficado por computadora

GRAFICACIÓN Unidad I - Facultad de Ciencias de la

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

GRAFICACIÓN

Unidad I

Profr. Hilario Salazar Martínez

OBJETIVO ESPECIFICO:

El alumno aprenderá a relacionar los conceptos básicos de geometría

analítica con los conceptos iniciales de graficado por computadora

Page 2: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

1.1 COORDENADAS DEL MUNDO REAL, VENTANA Y RECUADRO

Page 3: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 4: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

ENTIDADES DE DIBUJO

• LINEA: Segmento rectilíneo delimitado por sus puntos extremos.

• POLILÍNEA: Curva quebrada y/o mixtilinea, formada por segmentos

rectilíneos y/o curvilíneos.

• ARCOS: Segmento de circunferencia.

• CURVA CÓNICA: Se denomina asi a la intercepción de una superficie

conica de segundo grado con un plano.

• CURVAS LIBRES. Son curvas simples o compuestas sujetas a una o

varias ecuaciones (Las mas conocidas son splines y las Nurbs). Se

denominan libres porque el diseñador puede modificar simplemente con

desplazar o suprimir uno o mas puntos de control o incluso añadir nuevos.

Page 5: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 6: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

1.2 Graficación de primitivas:

rectas y arcosRectas horizontales y verticales.

Las rectas mas fáciles son las verticales y las horizontales.

• Para trazar una línea horizontal desde

P0 (Xinicial,y) P1(Xfinal,y) donde Xinicial ≤ Xfinal

Se obtiene manteniendo constante el valor de y e incrementado el valor de x

• Para trazar una línea vertical el valor de x permanece fijo y el valor de y

varia.

Recta horizontal

Page 7: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Rectas arbitrariasEl trazado de rectas con pendiente arbitrarias dan origen a ciertos problemas:

1. La pantalla de presentación puede

iluminarse solo en posición de

píxeles.

2. La presentación por barrido tiene

un efecto de escalera que

reproduce solo aproximadamente

la recta real.

Por ejemplo el pixel de la posición A es una mejor selección que el de la posición B,

Segundo, la determinación de los pixeles mas cercanos a la recta no es tare a facil, los

diferentes algoritmos calculan pixeles distintos para obtener la aproximación de la recta.

Page 8: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Es un procedimiento de trazado de rectas que es fácil de programar y que produce rectas razonablemente buenas.

Supóngase, modo de ejemplo, deseamos trazar un segmento de recta con puntos extremos P0( xinicial,yinicial) y P1(xfinal,yfinal) con una pendiente de

Cualquiera dos puntos consecutivos (x1,y1), (x2,y2) en la recta cumple con la ec. 2.1:

Para abs(m)<1 y xinicial<xfinal la liena se genera incrementando una entidad el valor anterior de x hasta llegar x final, resolviendo y en cada paso. (Si xinicial>xfinal) se intercambian ambos puntos) asi para cada par de puntos consecutivos

Al sustituir esta diferencia en la ec. 2.1 se obtiene

Analizador diferencial digital simple (ADD Simple)

Page 9: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

La ec. 2-2 permite calcular valores consecutivos de y desde el valor anterior

remplazando la multiplicación repetida con sumas en punto flotante. Este método

de obtención de valor actual que agrega una constante al valor previo es un

ejemplo de calculo incremental.

Si abs(m)>1 y yinicial<yfinal, recta se general invirtiendo el procedimiento. Esto

es, se incrementa el valor de y en una unidad hasta que se alcanza el valor de

yfinal y se resuelve x. (Si yinicial>yfinal, se intercambian ambos extremos). Para

puntos consecutivos

La ec. 2.3 es la ecuación incremental de la recta,

Page 10: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Ejemplo: programas-ejemplos\add-s.exe

Page 11: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

ADD entero

El ADD simple presenta presenta el inconveniente de emplear dos

operaciones que resultan costosas en el tiempo de computación: La

adición en punto flotante y la función round.

La idea básica del ADD entero consiste en remplazar la pendiente real

valuada por sus componentes enteros.

delta_y=yfinal-yinicial

delta_x=xfinal_xinicial

El algoritmo se divide en cuatro casos que dependen de la pendiente

de la recta. Cada caso tiene su propio conjunto de reglas. El error

indica la distancia que media entre la recta y un punto graficado.

Page 12: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Po(x,y) y Pf(xfinal,yfinal)

Algoritmo ADD enterodelta_y=yfinal-y

delta_x=xfinal-x

m=(yfinal-y)/(xfinal-x)

si delta_y<0

permutar(x’s,y’s)

delta_y=- delta_y

delta_x=- delta_x

error=0

si 0 m 1 y delta_x>0 y delta_y >0

/*caso 1*/

si error<0

x=x+1

y=y+1

dibujar(x,y)

error=error+delta_y

si error>0

x=x+1

y=y+1

dibujar(x,y)

error=error+delta_y-delta_x

Page 13: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

si m>1 y delta_x>0 y delta_y >0

/* caso 2*/

si error<0

x=x+1

y=y+1

dibujar(x,y)

error=error+delta_y-delta_x

si no

y=y+1

dibujar(x,y)

error=error-delta_x

si -1 m 0 y delta_x<0 y delta_y >0

/*caso 3*/

si error<0

x=x-1

dibujar(x,y)

error=error+delta_y

si no

x=x-1

y=y+1

dibujar(x,y)

error=error+delta_x+delta_y

Page 14: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

si m <-1 y delta_x<0 y delta_y >0

/*caso 4*/

si error<0

x=x-1

y=y+1

dibujar(x,y)

error=error+delta_x+delta_y

si no

y=y+1

dibujar(x,y)

error=error+delta_x

dibujar(xfinal,yfinal)

Page 15: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

ejemplo ADD entero Acceso directo a add-e

Page 16: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

• Otro componente es el llamado Frame Buffer, que no es otra cosa que el área de

memoria donde se construyen los gráficos antes de mostrarlos al usuario, es decir

que nuestro programa de OpenGL escribe en esta área de memoria, y que

automáticamente envía su contenido a la pantalla una vez que la escena esta

completamente construida.

Page 17: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Tipos en OpenGL

Debemos recordar que las librerías de OpenGL fueron escritas originalmente en C, asi que conservanmuchas características de este lenguaje, entre ellas, la estructura de sus procedimientos y los tipos que seutilizan.

Los tipos de OpenGL se anteponen las siglas GL, esto guarda una marcada equivalencia con los tiposgenéricos de C,

Ejem.:

Tamaño Correspondencia en C Definición en OpenGL 8-bit integer signed char GLbyte16-bit integer short GLshort32-bit integer int or long GLint, GLsizei32-bit floating-point float GLfloat, GLclampf64-bit floating-point double GLdouble, GLclampd8-bit unsigned integer unsigned char GLubyte, GLboolean16-bit unsigned integer unsigned short GLushort32-bit unsigned integer unsigned int or unsigned long GLuint, GLenum, GLbitfield

Usaremos:

a) glVertex3f(0.0,0.0,0.0) ;

b) Glfloat vertice[3]={0.0,0.0,0.0};

glVertexfv(vertice);

Ambas funciones crean un vertice situado en el origen de cordenadas del mundo, es decir x=y=z=0.0

en a) termia en 3f esto significa que vamos que vamos a especificar el vertice con 3 valores de tipo real,en b) tenemos que termia en fv estamos indicando a OpenGL que el verice lo daremos mediante un vectorde floats.

Page 18: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

glclearcolor() recibe como parámetro un vector de 4 valores que determinan el color

con el que se inicializa nuestro frame buffer, antes de escribir en el, dando como

resultado un color de fondo.

glColor3f(r,g,b) define el color del punto r(cantidad rojo), g(cantidad de verde) y

b(cantidad de azul) utilizando el sistema RGB.

ejem: glColor3f(0.0,0.0,0.0) color negro

glColor3f(1.0,1.0,1.0) color blanco

GLClear() sirve para borrar desde frame buffer valores de escena que hayan sido

construidas previamente a la actual.

GLPointSize(2.0) determina el numero de pixeles reales que ocupara cada uno de

nuestros puntos (cada punto deberá tener un grosor de 2 pixeles).

GLBegin() y GLEnd sirven para determinar los vértices de una figura.

Ejem: glColor3f(1.0,1.0,1.0);

glBegin(Gl_TRIANGLES);

glVertex3f(-1.0,0.0,0.0);

glVertex3f(1.0,0.0,0.0);

glVertex3f(0.0,1.0,0.0);

glEnd();

Page 19: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Respecto a las constantes que podemos usar en la función glBegin tenemos

entre otras

• GL_POINTS: puntos

• GL_LINES: cada 2 vértices definidos, se traza automáticamente una línea que los

une.

• GL_POLYGON: se unen todos los vértices formado un polígono.

• GL_QUADS: cada 4 vértices se unen para formar un cuadrilátero.

• GL_TRIANGLES: cada 3vertices se unen para formar un triangulo.

• GL_TRIANGLE_STRIP: crea un triangulo con los 3 primero vértices. entonces

sucesivamente crea un nuevo triangulo unido al anterior usando los dos últimos

vertices vertices que se han definido y el actual.

• GL_QUAD_STRIP: igual que el anterior pero con cuadriláteros.

Page 20: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 21: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Compilación de ejemplos de OpenGl y Visual C++ 6.0 bajo

windows 98/98/Me/XP

Archivos necesarios para compilar

C:\Archivo de programa\DevStudio\VC\includes\gl

Gl.h

Glaux.h

Glu.h

Glut.h

C:\Archivo de programa\DevStudio\VC\lib

Glaux.lib

Glu32.lib

Opengl32.lib

Glut32.lib

C:\windows\system

Glu32.dll

Glut32.dll

Opengl32.dll

Page 22: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

CREACIÓN DE UN NUEVO PROYECTO

1. File/New/proyects/Win32n Console Application o Win32 Application

a) si utiliza GLUT entonces seleccione Win32n Console Application

b) Si Apis de win32 seleccione Win32 Application

c) Project name (escribir nombre del proyecto)

d) Location (Directorio donde esta el código fte. del proyecto

2. File/New/Files/C++ Source File/File name (main) /OK

aquí pegamos el código fuente

3. Antes de compilar, agregar las librerías correspondientes en

Project/Settings/Links/cuadro Objects/library modules: aquí escribir

glut32.lib, glu32.lib, glaux.lib bueno todas la librerías a usar

/Output file name (C:\CURSO-GRAFICACION\programas-ejemplos\Debug)

4. Compilar

5. Si todo esta bien, entonces es generada una carpeta debug y es aquí donde se encuentra el ejecutable (main.exe) de la aplicación

Acceso directo a curso

Page 23: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

DESCRIPCIÓN DEL CUERPO DE UN PROGRAMA

La librería GLUT son:

glutInit(int arg, char **arrgv);

glutWindowPosition(int x, int y);

glutWindowSize(int width, int height);

glutDisplayMode(unsigned int mode);

glutCreateWindow(char *title);

glutDisplayFunc(void *(func)(void));

glutMainLoop();

inicializa GLUT

setea nuestra ventana de trabajo

donde x y y son las coordenadas de nuestra ventana

definimos tamaño de nuestra ventana

definimos el “modo”

modo puede tomar los siguientes valores:

* GLUT_RGB o GLUT_RGBA selecciona una

ventana con RGB(rojo, verde, azul o

RGBA(rojo, verde, azul y el canal alfa)

* GLUT_INDEX ?

* También se puede especificar que buffer:

- GLUT_ACCUM buffer de acumulación

- GLUT_STENCIL buffer stencil, se ocupa

para reflejos y sombras

- GLUT_DEPTH buffer de fondo

se crea la ventana

func es el nombre de la función que hace las tareas

de dibujar

ahora le avisamos a GLUT que estamos listos para

entrar en loop de eventos de la aplicación

Si se quiere una ventana tipo RGB, con buffer simple seria:

glutDisplayMode(GLUT_RGB GLUT_SINGLE GLUT_DEPTH);

Page 24: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Ejemplo 2 (pinta un triangulo)

#include <gl/glut.h> // glut.h incluye opengl.h y glu.h

#include <stdlib.h>

//#pragma comment (lib,\"glut.lib\")

//#pragma comment (lib,\"glaux.lib\")

float angulo=0.0;

void dibujar()

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Se borran el buffer de pantalla y el depth

glLoadIdentity();

glPushMatrix(); // Guarda la matriz actual en un stack

glRotatef(angulo, 0.0, 1.0, 0.0); // Rotamos en engulo sobre el eje y

glBegin(GL_TRIANGLES); // Se va a empezar una secuencia de triángulos.

glColor3f(1.0, 0.0, 0.0);

glVertex3f(-0.5, -0.5, 0.0); // glVertex3f se usa para definir puntos con 3

//coordenadas que sean flota, glvertex3d para 3 coordenadas que sean

//double.

glColor3f(0.0, 1.0, 0.0);

glVertex3f(0.0, 0.0, 0.0);

glColor3f(0.0, 0.0, 1.0);

glVertex3f(0.0, 0.5, 0.0);

glEnd(); // Se termina de definir los triángulos.

glPopMatrix(); // Recupera la matriz guardada en el stack

glutSwapBuffers();

angulo++;

}

Page 25: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

int main( int argc, char **argv)

{

glutInit(&argc, argv);

glutInitWindowPosition(100, 100); // Este comando puede ser

//opcional

glutInitWindowSize(320, 320);

glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("Primer programa GLUT");

glutDisplayFunc(dibujar);

glutMainLoop();

return 0;

}

Acceso directo a main

Acceso directo a triangulo2

Page 27: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Algoritmo de Línea Bresenham Básico

El algoritmo busca cual de dos píxeles es el que esta mas cerca según la trayectoria de la línea.

Consideremos el proceso de conversión para líneas con pendiente positiva 0 < m < 1.

Las posiciones de píxel a lo largo de la trayectoria de una línea se determinan al efectuar un muestreo de

x en intervalos unitarios.

Si se inicia desde el extremo izquierdo (x0,y0) de una línea determinada, se pasa a cada columna

sucesiva y se traza el píxel cuyo valor de y se aproxima mas a la trayectoria de la línea de rastreo.

Si suponemos que se debe desplegar el píxel en (xk,yk), a continuación se necesita decidir que píxel se

debe desplegar en la columna xk+1. Las alternativas son los píxeles (xk+1,yk), y (xk+1,yk+1).

Al realizar el muestreo en la posición xk+1 designamos la separación de píxeles verticales de la trayectoria

de la línea matemática como d1 y d2.

Page 28: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

La coordenada de y en la línea matemática en la posición de la columna de píxel xk+1 se

calcula como

La coordenada de y en la línea matemática en la posición de la columna de pixel xk+1 se

calcula como

(10) y = m (xk + 1) + b

Entonces

d1 = y - yk = m (xk + 1) + b – yk y

d2 = (y k + 1) - y = y k + 1 - m (x k + 1) – b

(11) d1 - d2 = 2m (x k + 1) - 2 yk + 2 b – 1

Un parámetro de decisión pk para el paso k en el algoritmo de línea se puede obtener al

reordenar la ecuación anterior, de modo que implique solo cálculos de enteros.

Esto se logra sustituyendo m = y / x donde x y y son las separaciones horizontal

y vertical de las posiciones

de los extremos de la línea y al definir:

(12) pk = x (d1 - d2) = x (2 y / x (x k + 1) - 2 yk + 2 b - 1)

= 2 y xk - 2 x yk + 2 y + 2 b x - x

= 2 y xk - 2 x yk + c

Page 29: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

El signo de pk es el mismo que el de d1 - d2 puesto que x > 0 en el ejemplo.

El parámetro c es un constante, donde c = 2 y + 2 b x - x, que es independiente delpixel.

Si el pixel yk esta mas cerca de la trayectoria de la línea que el pixel y k + 1 (es decir d1 < d2), entonces el parámetro de decisión pk es negativo.

En ese caso, trazamos el pixel inferior; de otro modo, trazamos el pixel superior.

Los cambios de coordenadas a lo largo de la línea ocurren en pasos unitarios ya sea en la dirección de x o en la de y. Por tanto, es posible obtener los valores de parámetros de decisión sucesivos al utilizar cálculos incrementales en enteros.

En el paso k + 1, el parámetro de decisión se evalúa con base en la ecuación anterior como

pk+1 = 2 y xk+1 - 2 x yk+1 + c

Al sustraer la ecuación (12) de la anterior obtenemos

pk+1 - pk = 2 y (xk+1 - xk) - 2 x( yk+1 - yk)

Pero xk+1 = x k + 1, de manera que

(13) pk+1 = pk + 2 y - 2 x( yk+1 - yk)

donde el termino yk+1 - yk es 0 o 1, dependiendo del signo del parámetro p.

Page 30: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Este calculo recurso de los parámetros de decisión se realiza en cadaposición entera de x, empezando en el extremo izquierdo de lascoordenadas de la línea.

El primer parámetro p0 se evalúa a partir de la ecuación (12) en la posicióndel pixel inicial (x0,y0), sustituyendo con

b = y0 - m x0 y m = y / x.

p0 = x (2 y / x(x0 + 1) - 2 y0 + 2 (y0 - (y / x) x0) - 1)

= 2 y x0 + 2 y - 2 x y0 + 2 x y0 - 2 y x0 - x

donde se obtiene la siguiente ecuación:

(14) p0 = 2 y - x

Page 31: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

En resumen, los pasos son:

1. Se capturan los dos extremos de la línea y se almacena el extremo izquierdo en (x0,y0).

2. Se carga (x0,y0) en el bufer de estructura, o sea, se traza el primer punto.

3. Se calculan las constantes y, x, 2 y, 2y-2 x, y se obtiene el valor inicial para el parámetro de decisión como p0 = 2 y - x.

4. En cada xk a lo largo de la línea, que inicia en k = 0, se efectúa la prueba siguiente: si pk< 0, el siguiente punto que se debe trazar es (xk+1,yk) y p k +1 = pk + 2 y. De otro modo, el siguiente punto en trazarse es (xk+1,yk+1) y p k +1 = p k + 2 y -2 x.

5. Se repite el paso 4 otras x veces.

Ejemplo

Para ilustrar el algoritmo, utilicemos la línea con extremos (20,10) y (30,18).

Esta línea tiene una pendiente de 0.8, con x = 10, y = 8

El parámetro de decisión inicial tiene el valor p0 = 2 y - x = 6

y los incrementos para calcular parámetros de decisión sucesivos son:

2 y = 16

2 y - 2 x = -4

Trazamos el punto inicial (x0,y0) = (20,10) y determinamos las posiciones de píxel sucesivos a

lo largo de la trayectoria de la línea a partir del parámetro de decisión como

Page 32: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

\programas-ejemplos\lin-bez.exe

Page 33: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Algoritmos de Generación de Circunferencias

Una circunferencia se define como un conjunto de puntos que se encuentran, en su

totalidad, a una distancia r de una posición central (xc, yc).

Esta relación de distancia se expresa por medio del teorema de Pitágoras en coordenadas

cartesianas como

(24) (x - xc)2 + (y - yc)

2 = r2

Algoritmo Básico

Se podría utilizar una ecuación para calcular la posición de los puntos de una

circunferencia pasando a lo largo del eje de las x en pasos unitarios de xc - r a xc + r y

calcular los valores correspondientes de y en cada posición como

Page 34: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Un método para dibujar el circulo es aprovechar la simetría de los cuadrantes, dibujandosolo uno y trazando los puntos simétricos en los demás cuadrantes.

Para el primer cuadrante se incrementaría x de 0 a r en pasos de 1, resolviendo paracada y positiva.

El trazo para un circulo con radio de 10, centrado en (0,0), utilizando este algoritmobásico, se muestra a continuación:

Page 35: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

El resultado de esto se muestra en la siguiente figura:

El problemas con método directo

•Cálculos considerables en cada paso

•El espacio entre píxeles no es uniforme

•Se podría ajustar al espacio al intercambia x y y siempre que |m|>1

Si aprovechamos la simetría de la circunferencia , se puede generar todas las posiciones

del pixel alrededor de una circunferencia, calculando los puntos x=0 y x=y

Page 36: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

12

3

4

5 6

7

8

Simetría en la circunferencia

Para un r determinado y una posición central (xc,yc), se debe establecer el primero el

algoritmo para calcular la posición del pixel alrededor de una trayectoria circular

centrada en el origen de coordenadas (0,0).

Asi cada posición calculada (x,y)se mueve a su posición propia en la pantalla al

sumar xc a x y yc a y

Page 37: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

A lo largo de la sección circular de en el primer

cuadrante, la pendiente (m) de la curva varia entre 0 y -1.

Para aplicar el método del punto medio, se define una función de circunferencia como:

Cualquier punto (x,y) en la frontera de la circunferencia con radio r satisface la ecuación

fcirc(x,y) = 0. Si el punto esta en el interior de la circunferencia, la función de la circunferencia

es negativa.

Para resumir, la posición relativa se puede determinar al verificar el signo de la función de

circunferencia:

Page 38: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

La siguiente figura muestra el punto medio entre los dos pixeles candidatos en la

posición de muestreo xk + 1.

Suponiendo que se acaba de trazar el pixel en (xk, yk), en seguida se necesita determinar

si el pixel en la posición (xk + 1, yk), o aquel en la posición (xk + 1, yk - 1) esta mas cerca

de la circunferencia. El parámetro de decisión es la función de circunferencia (27)

evaluada en el punto medio entre esos dos píxeles.

Page 39: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Se obtiene al evaluar la función de circunferencia en la posición de inicio (x0, y0) = (0,r)

p0 = fcirc(1, r - 1/2) = 1 + (r - 1/2) 2 - r2

o

(31) p0 = 1 + r 2 - r + ¼ - r2 = 5/4 – r

Si el radio r se especifica como un entero, se puede redondear simplemente p0 a

p0 = 1 - r (para r como un entero).

Page 40: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Se puede resumir los pasos del algoritmo de la circunferencia de punto medio como sigue:

1. Se capturan el radio r y el centro de la circunferencia (xc,yc) y se obtiene el primer punto

de una circunferencia centrada en el origen como (x0,y0) = (0,r).

2. Se calcula el valor inicial del parámetro de decisión como p0 = 5/4 - r.

3. En cada posición xk, iniciando en k=0, se efectúa la prueba siguiente:

Si pk < 0, el siguiente punto a lo largo de la circunferencia centrada en (0,0) es

(xk+1,yk) y pk+1 = pk + 2xk+1+1 = pk + 2xk +3.

De otro modo, el siguiente punto a lo largo de la circunferencia es

(xk+1,yk -1) y pk+1 = pk + 2xk+1+1 - 2yk+1 = pk + 2xk - 2yk +5,

donde 2xk+1 = 2xk + 2 y 2yk+1 = 2yk + 2.

4. Se determinan puntos de simetría en los siete octantes.

5. Se mueve cada posición de pixel calculada (x,y) a la trayectoria circular centrada en (xc,yc)

y se traza los valores de las coordenadas x = x + xc, y = y + yc.

6. Se repiten los pasos 3 a 5 hasta que x≥y.

Page 41: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Ejemplo

Dado el radio de una circunferencia r=10, se demuestra el algoritmo de la circunferencia de

punto medio al determinar las posiciones a lo largo del octante de la circunferencia en el primer

cuadrante desde x=0 hasta x=y. El valor inicial del parámetro de decisión es p0 = 1 - r = -9

En el caso de la circunferencia centrada en el origen de las coordenadas, el punto inicial es

(x0,y0) = (0,10) y los términos de incremento iniciales para calcular los parámetros de decisión

son 2 x0 = 0, 2 y0 = 20 Los valores sucesivos del parámetro de decisión y las posiciones a lo

largo de la trayectoria de la circunferencia se calculan mediante el método del punto medio

como

Page 42: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

En la siguiente figura se muestran las posiciones generadas en el primer cuadrante:

Page 43: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

1.3 Interpolación cúbicos

Un interpolante cúbico tiene la profundidad de que las funciones de las tres

dimensiones x(t), y(t) y z(t), son polinomios cúbicos en la variable t:

Como lo que aquí interesa son los segmentos de curva, el dominio de t es finito y

se supondrá que 0t≤1.

Una interpolación pasa a través de dos puntos y cumple con una condición de

diferenciabilidad en cada extremos. Estas cuatro condiciones requieren, al menos, un

grado polinomial de 3.

figura 1a

Page 44: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Esta razón del uso tan generalizado de los interpelantes. Si se dan N+1 puntos, se debe de funcionar N

interpolantes. Las derivadas iguales en los extremos de cada interpolante proporciona la

continuidad en las uniones (figura 1a).

El proceso para obtener los polinomios cúbicos es similar para x,y, y z. La única diferencia esta entre los

valores asignados para los extremos y sus derivadas. Por esta razón solo se describe la ecuación

x(t). Dados N+1 puntos

se desea obtener el interpolante cúbico que une dos puntos consecutivos. Para cada par de puntos xi,

xi+1 se tiene las suposiciones siguientes

1. La curva interpolante pasa por los puntos extremos:

2. El interpolante cumple con una condición de diferenciabilidad en estos puntos, Así, son conocidos

x’(0) y x’(1) donde la prima representa la diferenciación con respecto a t .

Dado que :

Page 45: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Es un sistema de cuatro ecuaciones y cuatro incógnitas: a, b, c y d. Al obtener

la solución única, se tiene

En términos de matrices:

Al sustituir los valores de t=0 y t=1 en las ecuaciones, se obtiene

Page 46: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Los coeficientes de los polinomios interpolantes cúbicos y(t) y z(t) se obtiene de manera

similar, reaplazando los valores del dato x y sus derivadas por los correspondientes

valores y derivadas de y y z.

Para dibujar un interpolante cúbico entre dos puntos consecutivos, se calculan varios

valores de x(t), y(t) y z(t). Los valores calculados se unen por medio de segmentos de

rectas.

Page 47: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

1.3 CURVAS DE BEZIER

Polinomio cúbico de Bezier.

Acceso directo a bezier34

Acceso directo (2) a SP.pif

figura 2a

Page 48: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 49: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 50: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 51: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 52: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 53: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

La curva de Bezier (cúbica) se determina completamente con cuatro puntosconsecutivos:

La línea sigue el segmento de línea poligonal a través de los cuatro puntos de control,pero solo pasa por el primero y cuarto punto (Figura) los dos puntos intermedios se usanpara definir la pendiente de la curva de los extremos. Solo veremos la ecuación lasecuaciones para la variable x (las de y y z son similares). Sea

las suposiciones son:

1.La curva pasa por los extremos:

2.pendiente en los extremos esta determinada por el extremo y el punto adyacente. Elcoeficiente 3 resulta del hecho de que la derivada de x3 es 3x2:

Al sustituir estos valores en el lado izquierdo de la ecuación 12-1 y simplificando, seobtiene

Page 54: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 55: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 56: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 57: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

B03(t)= 3! (1-t)3-0t0= (1-t)3

(3-0)!0!

B13(t)=3t(1-t)2=3t3+3t-6t2

B23(t)=3t2(1-t)=3t2-3t3

B33(t)=t3

Curvas de Bézier

Page 58: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

P(t)=P3t3 + P2(3t2-3t3)+ … =(P3-3P2+3P1-Po)t3 + (….) t2 + (…) t + P0

= at3 + b t2 + c t + d

P(t)= at3 + bt2 + ct + d

X’(0)=n(X1-X0) X‘(1)=n(Xn-Xn-1)

1) X(0)=d

2) X(1)= a + b + c + d

3) 3(X1 - Xo) = X’(0)= c

4) 3(X3 - X2)= X’(1)= 3a+2b+c

en 2) X(1)=a+b+3(X1- X0) + X0

=a+b+3X1 -2X0

2a) b=-a-3X1+ 2X0 +X(1)=2Xo-3X1- a +X(1)

en 4) 3(X3-X2)=3a+2[2Xo-a-3X1+X(1)]+3(X1-X0)

=3a+4X0-2a-6X1+2X(1)+3X1-3X0=a+X0-3X1+2X(1)+3X1-3X0

=a+X0-3X1+2X(1)

a=-X0+3X1-3X2+3X3-2X(1)

4a) a=-X0+3X1-3X2+3X3-2X(1)

1ª.

2ª.

Page 59: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

en 2a) b =2X0+X0-3X1+3X2-3X3+2X(1)-3X1+X(1)

= 3X0-6X1-3X2-3X3+3X(1)

cte.

a

b

c

d

=

X0

X1

X2

X3

Page 60: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 61: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 62: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 63: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Tipos de superficie más frecuentes

utilizadas:A) Superficies de revolución. Se genera por rotación de una curva

cualquiera (generatriz) alrededor de un eje.

Page 64: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

B) Superficies cilíndrica. Se generan por una curva abierta o

cerrada (base o generatriz) al desplazarse y siguiendo una

trayectoria recta o curva abierta (eje). El plano que contiene a la

generatriz formará en toda su trayectoria un ángulo constante con el

eje o directriz. Estas superficies pueden clasificarse en:

• Barrido: la directriz es un segmento rectilíneo En este caso el

desplazamiento es una traslación simple.

• Deslizamiento: La directriz es una polilínea 2D o 3D compuesto

por tramos de rectas y curvos. El desplazamiento de la generatriz

consta de desplazamientos y giros

Page 65: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 66: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

C) Superficies regladas. Generadas por una línea rectas (generatriz) al

desplazarse apoyadas en dos curvas ( directrices) iguales o diferentes

Superficie regladas

Page 67: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

Superficies esculpidas

D) Superficies Esculpidas (deslizamiento 3D). Generadas por una curva al

desplazarse apoyadas en dos curvas no concéntricas

Page 68: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

E) Superficies Adaptadoras. Generadas por una línea recta apoyadas en dos

curvas extremas diferentes, generalmente una poligonal rectilínea y la otra

compuesta de arcos

Page 69: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

F) Formas libres. Se puede obtener por dos procedimientos diferentes:

interpolación o aproximación.

La interpolación puede ser: Lineal, Bilineal, De Lagrange y Cubica

Page 70: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 71: GRAFICACIÓN Unidad I - Facultad de Ciencias de la
Page 72: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

f.1) Superficies racionales Splines, B-splines, Bezier y Nurbs. La diferencia

fundamental estriba en que están controladas no por un poligono, sino por un

poliedro consistente en una malla de puntos en el espacio 3D debidamente

ordenados

Page 73: GRAFICACIÓN Unidad I - Facultad de Ciencias de la

f.2) Superficies de Bezier. Estas superficies se determinan por un poliedro de u*v

vértices y se generan a través del proceso siguiente.

Page 74: GRAFICACIÓN Unidad I - Facultad de Ciencias de la