martes, 28 de febrero de 2012

PRESENTACION

Transformaciones geométricas basicas en los sistemas de graficación



Gráficas por computadora (Computer Graphics)

Estudia los procedimientos para producir despliegues visuales en dispositivos de salida como el monitor de una computadora.



Una transformación geométrica puede aplicarse a figuras planas (2D) o a objetos en el espacio (3D).

Si los puntos que se alteran tienen coordenadas de dos componentes (x,y), la transformación es en 2D.

Y si alteran puntos con coordenadas (x,y,z), la transformación es en 3D.



Transformaciones geométricas básicas en 2D son:

  • Escalación
  • Traslación
  • Rotación

Transformaciones geométricas básicas en 3D son:

  • Escalación
  • Traslación
  • Rotación en torno al eje X
  • Rotación en torno al eje Y
  • Rotación en torno al eje Z

Procedimiento general al aplicar una transformación geométrica

  • Primero se debe tener la información de las coordenadas del objeto a transformar.
  • Se selecciona la transformación geométrica por realizar.
  • Se aplica la transformación seleccionada a cada una de las coordenadas originales del objeto, para obtener las coordenadas modificadas del objeto.
  • Se redibuja el objeto con las nuevas coordenadas, visualizándose el objeto ya modificado.



Escalación 2D



Nos permitirá cambiar las dimensiones de un objeto.

Requiere 2 parámetros:

Sx = Factor de escalación en X

Sy = Factor de escalación en Y

Sx,Sy > 1 = Aumenta la dimensión

Sx,Sy < 1 = Disminuye la dimensión

Sx,Sy = 1 =Se mantiene la dimensión





Traslación 2D



Nos permitirá cambiar la posición de un objeto, moviéndolo en línea recta desde una posición inicial a la posición final.

Requiere 2 parámetros:

Tx = Desplazamiento en X

Ty = Desplazamiento en Y

Tx, Ty > 0 = Desplazamiento positivo

Tx, Ty < 0 = Desplazamiento negativo

Tx,Ty = 0 = No hay desplazamiento



Rotación 2D



Nos permite rotar o girar un objeto en torno al origen un ángulo dado.
Requiere 1 parámetro:

q = Ángulo de rotación

q > 0 = Rotación contraria a sentido de las manecillas del reloj

q < 0 = Rotación en el sentido de las manecillas del reloj

q = 0 = Sin rotación



Escalación 3D



Nos permitirá cambiar las dimensiones de un objeto.

Requiere 3 parámetros:

Sx = Factor de escalación en X

Sy = Factor de escalación en Y

Sz = Factor de escalación en Z

Sx,Sy,Sz > 1 = Aumenta la dimensión

Sx,Sy,Sz < 1 = Disminuye la dimensión

Sx,Sy,Sz = 1 = Se mantiene la dimensión



Traslación 3D



Nos permitirá cambiar la posición de un objeto, moviéndolo en línea recta desde una posición inicial a la posición final.

Requiere 3 parámetros:

Tx = Desplazamiento en X

Ty = Desplazamiento en Y

Tz = Desplazamiento en Z

Tx, Ty,Tz > 0 = Desplazamiento positivo

Tx, Ty,Tz < 0 = Desplazamiento negativo

Tx,Ty,Tz = 0 = No hay desplazamiento





Representación matricial

  • Facilita el cómputo de las transformaciones a simples multiplicaciones matriciales.
  • Se requiere representar las coordenadas en forma homogénea.

(x,y) se representa como (x,y,1)

(x,y,z) se representa como (x,y,z,1)



Coordenadas Homogéneas



Uno de los problemas con que nos enfrentamos es la posible confusión entre un punto y un vector, a la hora de representarlos. Por ejemplo, P = ( 3 2 ) y v = ( -2 5 ) comparten la misma representación matricial. Además, no se puede representar un cambio de marco con multiplicaciones matriciales. Para evitar estas dificultades, usaremos coordenadas homogéneas las cuales agregan un elemento o dimensión más al que tenemos, para representar puntos y vectores.
En el marco descrito por ( u1, u2, P0 ), cualquier punto, P, puede ser representado como,

P = a u1 + b u2 + P0

Podemos expresar lo anterior con matrices, resultando en lo siguiente:

              ( u1 )

P = ( a b 1 ) ( u2 )

              ( P0 )

Asimismo, podemos expresar cualquier vector del mismo marco de la siguiente manera:

v = c u1 + d u2

La expresión en forma matricial es la siguiente:

              ( u1 )

v = ( c d 0 ) ( u2 )

              ( P0 )

Podemos expresar este vector sencillamente como:

v = ( c d 0 )

Resumiendo, con las coordenadas homogéneas,

  • Podemos representar y manipular puntos y vectores de la misma manera.
  • Cualquier punto en 2D se representará así, P = ( x, y, 1 ).
  • Cualquier vector en 2D se representará así, v = ( vx, vy, 0 ).

Existe una relación lineal entre un punto en 2D y su representación en coordenadas homogéneas. Al extender un punto en 2D a uno en 3D, éste se convierte en una línea recta de la forma, P = ( tx, ty, tw ). Por lo tanto, tenemos un conjunto de coordenadas equivalentes, como es ( 2, 3, 1 ), ( 4, 6, 2 ), ( 20, 30, 10 ), etcétera. Sin embargo, como nos interesa mantener el tercer componente como 1, debemos homogeneizar el trío. Esto se hace dividiendo el tercer componente, w, entre todos. Por ejemplo, P = ( -15, 10, 5 ) pasa a ser P = ( -3, 2, 1 ).

Bibliografia

jueves, 23 de febrero de 2012

RESUMEN CAPITULO #2

UNIDAD 2
  Habitualmente, un paquete gráfico permite al usuario especificar que parte de una imagen definida se debe visualizar y dónde esta parte se debe colocar en el dispositivo de visualización. Cualquier sistema de coordenadas que sea conveniente, referido al sistema de referencia de coordenadas del mundo, se puede usar para definir la imagen.
  Las partes dentro de las zonas seleccionadas se mapean entonces sobre zonas especificadas de las coordenadas del dispositivo. Cuando se seleccionan múltiples zonas de vista, estas zonas se pueden colocar en ubicaciones de visualización independientes, o algunas zonas se podrían insertar en zonas de visualización más grandes.

2.1. Transformaciones bidimensionales
 Traslación
  Se aplica una traslación en un objeto para cambiar su posición a lo largo de la trayectoria de una línea recta de una dirección de coordenadas a otra.
-Se pueden expresar las ecuaciones anteriores en una sola ecuación matricial al utilizar vectores de columna.

 
La traslación es una transformación de cuerpo rígido que mueve objetos sin deformarlos, es decir, se traslada cada punto del objeto la misma distancia.
  Los polígonos se trasladan al sumar el vector de traslación a la posición de coordenadas de cada vértice y se vuelve a generar el polígono utilizando un nuevo conjunto de coordenadas y vértices y las especificaciones actuales de los atributos.
Rotación
  Se aplica una rotación bidimensional en un objeto al cambiar su posición a lo largo de la trayectoria de una circunferencia en el plano de xy.
  Los valores positivos para el ángulo de rotación definen rotaciones en sentido opuesto a las manecillas del reloj alrededor del punto pivote y los valores negativos giran los objetos en la dirección del reloj.
  Sl igual que con las traslaciones, las rotaciones son transformaciones de cuerpos rígidos que mueven los objetos sin deformarlos. Se giran a través del mismo ángulo todos los puntos del objeto.

Escalacion
  Una transformación de escalación altera el tamaño de un objeto.
-Los valores menos que 1 reducen el tamaño de los objetos y los valores mayores que 1 producen una ampliación.
-Una escalación uniforme que mantiene las proporciones relativas de los objetos.
-Los objetos que se transforman con las ecuaciones.
-Podemos controlar la localización de unos objetos escalado al seleccionar una posición llamada punto fijo, que debe permanecer sin cambios después de la transformación de escalación.
-Incluir coordenadas para un punto fijo en las ecuaciones de escalación es similar a incluir coordenadas para un punto pivote en las ecuaciones de rotación.
2.2  Coordenadas homogéneas y representación matricial
  En las aplicaciones de diseño y de creación de imágenes, realizamos traslaciones, rotaciones y escalaciones para ajustar los componentes de la imagen en sus posición es apropiadas. En este tema consideramos cómo se pueden volver a formular las representaciones de la matriz de modo que se pueden procesar de manera eficiente esas secuencias de transformación.
  Un planteamiento más eficiente combinaría las transformaciones de manera que se obtengan las coordenadas finales directamente a partir de las coordenadas iníciales para eliminar el cálculo de coordenadas intermedias
  Podemos combinar los términos de multiplicación y de adición para transformaciones geométricas bidimensionales en una sola representación de matriz al ampliar las representaciones de matriz de 2 por 2 a matrices de 3 por 3.
-En matemáticas se utiliza el término coordenadas homogéneas para referirse al efecto de estas representaciones de ecuaciones cartesianas.
-Esto sólo significa que si se sustituye cada uno de los tres parámetros con cualquier valor v veces ese parámetro, el valor v  se puede factorizar fuera de las ecuaciones.
-Las representaciones de matriz o representaciones matriciales son métodos estándar para implementar transformaciones en sistemas de gráficas.

2.3 Composición de transformaciones bidimensionales
  Con las representaciones de matriz del tema anterior, podemos establecer una matriz para cualquier secuencia de transformaciones como una matriz de transformación compuesta al calcular el producto de la matriz de las transformaciones individuales.
Traslaciones, rotaciones y escalaciones
Traslaciones
-Se aplican dos vectores de traslación sucesivos.
-Se representan P y P’ como vectores de columna de coordenadas homogéneas.

Rotaciones
-Dos rotaciones sucesivas que se aplican en el punto P producen la posición transformada.

Escalaciones

-
Concatenar matrices de transformación para dos operaciones de escalación sucesivas
-La matriz resultante en este caso indica que las operaciones de escalación sucesivas son multiplicativas.
Rotación del punto pivote general

  Con un paquete gráfico que sólo ofrezca una función de rotación para girar objetos con respecto del origen de las coordenadas, podemos generar casi cualquier punto pivote.

Escalación del punto fijo general

  La siguiente figura ilustra una secuencia de transformación para producir escalación con respecto de una posición fija seleccionada (x f, y f) al utilizar una función de escalación que sólo puede escalar en relación con el origen de las coordenadas.




Propiedades de concatenación

  La multiplicación de matrices es asociativa. Para tres matrices cualesquiera A, B y C, el producto matricial A·B·C se puede elevar a cabo al multiplicar primero a por B o multiplicar primero B por C:

A·B·C =(A·B)·C =A·(B·C)

2.4 Transformación ventana-área de vista

  Algunos paquetes gráficos permiten que el programador especifique coordenadas de primitivas de salida en un sistema de coordenadas de mundo de punto flotante, usando las unidades que sean relevantes para el programa de aplicación: angstroms, micras, metros, millas, años luz, etcétera.

  Esta correspondencia se puede efectuar si el programador de la aplicación proporciona al paquete gráfico una matriz de transformación para la correspondencia. Otra forma es que el programador de la aplicación especifique una región rectangular en coordenadas de mundo, llamada ventana de coordenadas mundiales y una región rectangular correspondiente en coordenadas de pantalla, llamada área de vista, con la cual se establece la correspondencia de la ventana de coordenadas mundiales.

  El modificador coordenadas de mundo se emplea con ventana para subrayar que no se trata de una ventana de administrador de ventanas, un concepto distinto y más reciente que por desgracia tiene el mismo nombre.

2.5 Transformaciones de composición general y de eficiencia computacional

  Una transformación bidimensional general, que representa una combinación de traslaciones, rotaciones y escalaciones.

-Sin concatenación, se aplicarían las transformaciones individuales una a la vez y se podría reducir en forma considerable el número de cálculos.

  En animaciones y otras aplicaciones que implican muchas transformaciones repetidas y ángulos de rotación pequeños, podemos utilizar aproximaciones y cálculos repetitivos para reducir los cálculos en las ecuaciones de transformación compuesta.  Cuando el ángulo de rotación es pequeño, se pueden sustituir las funciones trigonométricas con valores de aproximación con base en los primeros términos de sus expansiones de series de potencia. Para ángulos bastante pequeños (menores a 10°) cos θ es de alrededor de1 sen θ tiene un valor muy cercano al valor de θ en radianes.


Las transformaciones compuestas a menudo implican cálculos de la matriz inversa. Por ejemplo, las secuencias de transformación para las direcciones de escalación general y para reflexiones y recortes se pueden describir con componentes de rotación inversa.

2.6 Representación matricial de transformación es tridimensionales

Así como las transformaciones bidimensionales se pueden representar con matrices de3 X 3 usando coordenadas homogéneas, las transformaciones tridimensionales se pueden representar con matrices de 4 X 4, siempre y cuando usemos representaciones de coordenadas homogéneas de los puntos en el espacio tridimensional. Así, en lugar de representar un punto como (x, y, z ), lo hacemos como (x, y, z, W ), donde dos de estos cuádruplos representan el mismo punto si uno es un multiplicador distinto de cero del otro: no se permite el cuádruplo (0, 0, 0, 0).

  La transformación de un punto a esta forma se denomina homogeneización, igual que antes. Además los puntos cuya coordenada W es cero se llaman puntos en el infinito. También existe una interpretación geométrica.

2.7 Composición de transformación es tridimensionales

En este apartado se analizará la forma de componer matrices de transformación tridimensionales usando un ejemplo. El objetivo es transformar los segmentos de línea dirigida P1P2 y P1P3 en la figura 2.18 de su posición inicial en la parte (a) a su posición final en la parte (b). De esta manera, el punto P1 se trasladará al origen P1P2 quedará en el eje positivo y P1P3 quedará en la mitad del eje positivo del plano (x, y). Las longitudes de las líneas no se verán afectadas por la transformación.

martes, 21 de febrero de 2012

CUBO 2D

#include <GL/glut.h>
void display(void)
{       
  typedef GLfloat point2[2];
  point2 vertice[8] = {
  {50.0,50.0},   
  {150.0,50.0},   
  {150.0,150.0},   
  {50.0,150.0},   
  {200.0,100.0},   
  {200.0,200.0},   
  {100.0,200.0},   
  {100.0,100.0}};  
 
         glColor3f(1.0,0.0,0.0);
                gluOrtho2D(0.0, 500.0, 0.0, 500.0);
 glClear(GL_COLOR_BUFFER_BIT);
  glBegin(GL_LINES);
  glVertex2fv(vertice[0]);
  glVertex2fv(vertice[1]);
  glVertex2fv(vertice[1]);
  glVertex2fv(vertice[2]);
  glVertex2fv(vertice[2]);
  glVertex2fv(vertice[3]);
  glVertex2fv(vertice[3]);
  glVertex2fv(vertice[0]);
  glVertex2fv(vertice[1]);
  glVertex2fv(vertice[4]);
  glVertex2fv(vertice[2]);
  glVertex2fv(vertice[5]);
  glVertex2fv(vertice[5]);
  glVertex2fv(vertice[4]);
  glVertex2fv(vertice[5]);
  glVertex2fv(vertice[6]);
  glVertex2fv(vertice[6]);
  glVertex2fv(vertice[3]);
  glVertex2fv(vertice[0]);
  glVertex2fv(vertice[7]);
  glVertex2fv(vertice[4]);
  glVertex2fv(vertice[7]);
  glVertex2fv(vertice[6]);
  glVertex2fv(vertice[7]);
  glEnd();
        glFlush();
}
void main(int argc, char** argv)
{
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
        glutInitWindowSize(500, 500);
     
        glutCreateWindow("Cubo en 2D");
        glutDisplayFunc(display);
 
        glutMainLoop();      
}

lunes, 20 de febrero de 2012

UNIDAD II Graficación 2D


1- Algoritmo DDA para generación de líneas

El código de este algoritmo es el siguiente :

void DDA(int x0,int y0,int xFin,int yFin)
{
int dx = xFin - x0, dy = yFin - y0, steps, k;
float xIncremento, yIncremento;
float x = x0, y = y0;
if (fabs (dx) > fabs (dy))
steps = fabs (dx); /* |m|<1>
else
steps = fabs (dy); /* |m|>=1 */
xIncremento=float(dx)/float (steps);
yIncrement = float (dy) / float (steps);
setPixel (round (x), round (y));
for (k = 0; k <>
{
x += xIncremento;
y += yIncremento;
setPixel (round (x), round (y));
}
}



El Algoritmo DDA es un algoritmo de línea de conversión de rastreo que se basa en el cálculo ya sea en el incremento de X o en el incremento de Y. La finalidad de este algoritmo es determinar los valores enteros correspondientes más próximos a la trayectoria de la línea para la otra coordenada.




2-Algoritmo de Bresenham para trazar líneas

El algoritmo de Bresenham sirve para trazar una línea entre dos puntos.

void Bres(int x0,int y0,int xFin,int yFin)
{
int dx = fabs(xFin - x0),
dy = fabs(yFin - y0);
int p = 2 * dy - dx;
int dosDy = 2 * dy,
dosDyMenosDx = 2 * (dy - dx);
int x, y;
/* Determinamos que punto usamos como inicio. */
if (x0 > xFin) {
x = xFin;
y = yFin;
xFin = x0;
}
else {
x = x0;
y = y0;
}
setPixel (x, y);
while (x <>
x++;
if (p <>
p += dosDy;
else {
y++;
p += dosDyMenosDx;
}
setPixel (x, y);
}
}









3-Algoritmo de Bresenham para trazar circunferencias

El algoritmo de línea de Bresenham se adapta a la generación de circunferencias al establecer los parámetros de decisión para identificar el pixel más cercano a la circunferencia en cada paso del muestreo.Además sincroniza el dibujado de los píxeles en cada octante de la circunferencia.


Código:

void circuloPtoMedio(scrPt circCtr, GLint radio)
{
scrPt circPt;
GLint p = 1 - radio;
circPt.x = 0;
circPt.y = radio;
void circuloPuntos(scrPt, scrPt);
/* Dibujamos el punto inicial en cada cuadrante del circulo*/
circuloPuntos(circCtr, circPt);
/* Calculamos los siguientes puntos y los dibujamos en cada octante*/
while (circPt.x <>
circPt.x++;
if (p <>
p += 2 * circPt.x + 1;
else {
circPt.y--;
p += 2 * (circPt.x - circPt.y) + 1;
}
circuloPuntos(circCtr, circPt);
}
}
void circuloPuntos(scrPt circCtr, scrPt circPt);
{
setPixel (circCtr.x + circPt.x, circCtr.y + circPt.y);
setPixel (circCtr.x - circPt.x, circCtr.y + circPt.y);
setPixel (circCtr.x + circPt.x, circCtr.y - circPt.y);
setPixel (circCtr.x - circPt.x, circCtr.y - circPt.y);
setPixel (circCtr.x + circPt.y, circCtr.y + circPt.x);
setPixel (circCtr.x - circPt.y, circCtr.y + circPt.x);
setPixel (circCtr.x + circPt.y, circCtr.y - circPt.x);
setPixel (circCtr.x - circPt.y, circCtr.y - circPt.x);
}