graficaciÓn unidad i - facultad de ciencias de la
TRANSCRIPT
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
1.1 COORDENADAS DEL MUNDO REAL, VENTANA Y RECUADRO
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.
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
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.
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)
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,
Ejemplo: programas-ejemplos\add-s.exe
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.
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
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
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)
ejemplo ADD entero Acceso directo a add-e
• 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.
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.
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();
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.
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
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
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);
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++;
}
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
Ejemplos:
Acceso directo a Project2
Acceso directo a PINTA
TAREA2 (ENTREGA: 06/06/2005
HORA DE CLASES )
TAREA2.ppt
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.
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
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.
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
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
\programas-ejemplos\lin-bez.exe
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
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:
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
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
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:
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.
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).
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.
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
En la siguiente figura se muestran las posiciones generadas en el primer cuadrante:
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
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 :
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
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.
1.3 CURVAS DE BEZIER
Polinomio cúbico de Bezier.
Acceso directo a bezier34
Acceso directo (2) a SP.pif
figura 2a
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
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
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ª.
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
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.
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
C) Superficies regladas. Generadas por una línea rectas (generatriz) al
desplazarse apoyadas en dos curvas ( directrices) iguales o diferentes
Superficie regladas
Superficies esculpidas
D) Superficies Esculpidas (deslizamiento 3D). Generadas por una curva al
desplazarse apoyadas en dos curvas no concéntricas
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
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
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
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.