miércoles, 29 de febrero de 2012

Transformaciones geométricas basicas



·         cambiar su dimensión

·         cambiar su posición

·         rotarlas

·         reflejarlas

·         enchuecarlas




¿Cómo se llevan a cabo estas alteraciones y manipulaciones?


-          Aplicando transformaciones geométricas a las figuras u objetos deseados.



-          Una transformación geométrica altera la descripción de las coordenadas de los objetos.



Transformación geométrica en el plano y en el espacio.



·         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.




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.


Procedimiento al aplicar una T.G.



Rotación 2D


Nos permite rotar o girar un objeto en torno al origen un ángulo dado.

   Requiere 1 parámetro:

ϴ  = Ángulo de rotación

ϴ> 0  Rotación contraria a sentido de las 

manecillas del reloj

ϴ< 0  Rotación en el sentido de las manecillas del   

reloj

ϴ = 0 Sin rotació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




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





Rotación 3D en torno al eje X

Nos permite rotar o girar un objeto en torno al eje X un ángulo dado



       Requiere 1 parámetro:

ϴ  = Ángulo de rotación



ϴ> 0  Rotación contraria a sentido de las 

manecillas del reloj


ϴ< 0  Rotación en el sentido de las manecillas del   

reloj
ϴ= 0 Sin rotación




Rotación 3D en torno al eje Y

Nos permite rotar o girar un objeto en torno al eje Y un ángulo dado


       Requiere 1 parámetro:

ϴ = Ángulo de rotación


ϴ> 0  Rotación contraria a sentido de las 

manecillas del reloj


ϴ< 0  Rotación en el sentido de las manecillas del   

reloj


ϴ= 0 Sin rotación




 
Rotación 3D en torno al eje Z



Nos permite rotar o girar un objeto en torno al eje Z un ángulo dado

       Requiere 1 parámetro:

ϴ  = Ángulo de rotación



ϴ> 0  Rotación contraria a sentido de las 

manecillas del reloj



ϴ< 0  Rotación en el sentido de las manecillas del   

reloj



ϴ= 0 Sin rotación


 

Representación matricial de transformaciones geométricas

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)


jueves, 23 de febrero de 2012

Trazo de Lineas Rectas y Poligonos.

Trazado de líneas
Diferentes tipos de líneas y situaciones en que se dibujan se resuelven con técnicas diferentes.
- Líneas cortas, o líneas que corren paralelas a otras que nos sirven de referencia.
- Líneas largas. Es el caso de líneas que unen dos puntos alejados, sin ninguna otra referencia. Las primeras líneas de cualquier croquis entran en esta categoría.
Líneas cortas o líneas paralelas a otras ya existentes se las puede dibujar de un solo trazo. Primero se deben mirar bien los puntos de inicio y terminación para luego ejecutar el trazo.
Para el trazado de líneas largas vamos a dar tres técnicas que se utilizarán según las circunstancias.
Líneas punto a punto
La técnica más rápida es, una vez determinados los puntos a unir se comienza moviendo el lápiz desde uno de ellos hacia el otro. Mientras se hace este movimiento se debe mantener la vista sobre el punto de destino. Esto último nos permitirá conservar la dirección.
Líneas compuestas
Una segunda técnica es proceder mediante trazos de cinco a siete centímetros; como si se estuviesen dibujando una sucesión de líneas más cortas. La interrupción del trazo permite verificar el rumbo del trazo y se corregir si es necesario. Los trazos sucesivos no se superponen a fin de posibilitar uniformidad de espesor. Se deja una pequeñísima luz entre ellos de forma tal que apenas resulte perceptible la interrupción y mantenga el espesor uniforme. [dibujo de ejemplo]
Líneas de construcción
Una tercera técnica, particularmente aplicable cuando se está planteando el dibujo, es utilizar líneas de tanteo. Resulta un poco más lenta que las anteriores, pero es de gran ayuda para obtener líneas rectas particularmente cuando son muy largas. Consiste en insinuar la línea en forma apenas visible con trazos muy suaves. Idealmente, solo el dibujante debería percibir esos trazos de tanteo. Se observa el resultado obtenido. Se introducen las correcciones necesarias hasta lograr definir el trayecto correcto. Entonces se comienza el trazado de la línea en forma similar al primer método, pero ahora con una guía visual. Si fuese necesario, porque se utilizaron demasiadas líneas de tanteo, se podrán borrar las que no sirven, antes del trazado definitivo.
Modelo de Representación Polígonal sobre OpenGL.

La librería gráfica OpenGL es por naturaleza una librería orientada al trabajo con modelos poliédricos, por tanto nos será fácil realizar representación de esta naturaleza. Puntualizaremos que se trata de una librería de funciones orientada principalmente a modelos interactivos, por ello se premia la rapidez frente al espacio, el tipo de representación poligonal que empleara será por tanto explícita.

Las definiciones de primitivas poligonales en OpenGL se encierran entre las llamadas a las funciones:

glBegin(GLEnum tipo_primitiva) y glEnd(void). Entre dichas funciones deberemos especificar la lista de vértices que componen nuestro polígono. La función para pasar las coordenadas de cada vértice es glVertex3fv(GLFloat *coor), donde ‘coor’ es un vector que contiene las tres coordenadas del vértice.

Los valores normales para el tipo de primitiva son las constantes:

Valor de la Cte GL Tipo de Primitiva Poligonal

GL_POINTS Puntos aislados
GL_LINES Líneas de dos vértices
GL_LINE_STRIP Línea de cualquier numero de vértices
GL_LINE_LOOP Línea Cerrada.
GL_POLYGON Polígono de Cualquier tipo
GL_TRIANGLES Polígonos de tres lados
GL_TRIANGLE_STRIP Tira de Triangulos
GL_QUADS Polígonos de cuatro vertices
GL_QUAD_STRIP Tira de Cuadrilateros.
GL_TRIANGLE_FAN Abanico de triangulos.









Algoritmo de Línea DDA

El analizador diferenciador digital (DDA - Digital Differential Analyzer) es un algoritmo de conversion de rastreo que se basa en el calculo ya sea de Dy o Dx por medio de las ecuaciones (4) o (5).

Se efectúa un muestreo de la línea en intervalos unitarios en una coordenada y se determina los valores enteros correspondientes mas próximos a la trayectoria de la línea para la otra coordenada.

Tomemos una línea con pendiente positiva, si la pendiente | m | £ 1, se hace el muestreo en x en intervalos unitarios (Dx = 1 y Dy = m dado que m = Dy / Dx) y se calcula cada valor sucesivo de y como:
(6) yk+1 = yk+ m

El subíndice toma valores enteros a partir de 1 y aumenta a razón de 1 hasta alcanzar el valor final.

Ya que m puede ser cualquier numero real entre 0 y 1, los valores calculados de y deben redondearse al entero mas
cercano.

Para líneas con una pendiente | m | > 1, se revierten las funciones de x y y, o sea, se realiza un muestreo de y en intervalos unitarios (Dy = 1 y Dx = 1/m dado que m = Dy / Dx) y se calcula cada valor sucesivo de x como:
(7) xk+1 = xk+ 1/m

Las ecuaciones (6) y (7) se basan en la suposición de que las líneas deben procesarse del extremo izquierdo al derecho.

Si este procesamiento se revierte, entonces Dx o Dy serian -1, y
yk+1 = yk - m o xk+1 = xk - 1/m

El procedimiento completo de dibujo seria el siguiente:

void Line(Display* display, Window win, GC gc, int x0, int y0, int x1, int y1)
{
float x, y, xs, ys;
int dx, dy, steps;
dx = x1 - x0;
dy = y1 - y0;
/* se asigna el punto de donde se comenzara a dibujar la línea */
x = x0;
y = y0;
/* verificar si la pendiente es mayor de x o y, para luego asignarla a steps */
if (abs(dx) > abs(dy))
steps = abs(dx);
else
steps = abs(dy);
/* se divide por la pendiente mayor, para dar xs o ys igual a 1 (o -1) */
Alfredo Weitzenfeld Gráfica: Línea 3
if (steps == 0) {
XDrawPoint(display,win,gc,round(x),round(y));
fprintf(stderr,”this line is a point”);
return;
}
xs = dx/steps;    
ys = dy/steps;
/* se cicla uno a la vez hasta llegar al numero de steps máximo */
for (i = 0; i <= steps; i++)
{
XDrawPoint(display,win,gc,round(x),round(y)); /* round(x) -> x+0.5 */
x = x + xs;
y = y + ys;
}
}

Algoritmo de Línea Bresenham Básico

Un algoritmo preciso y efectivo para la generación de líneas de rastreo, desarrollado por Bresenham (1965), convierte mediante rastreo las líneas utilizando solo cálculos incrementales con enteros que se pueden adaptar para desplegar también curvas.

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

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

Las posiciones de pixel 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 pixel cuyo valor de y se aproxima mas a la trayectoria de la línea de rastreo.
Si suponemos que se debe desplegar el pixel en (xk,yk), a continuación se necesita decidir que pixel se debe desplegar en la columna xk+1.

Las alternativas son los pixeles (xk+1,yk), y (xk+1,yk+1).

Al realizar el muestreo en la posición xk+1 designamos la separación de pixeles verticales de la trayectoria de la línea matemática como d1 y d2.

lunes, 20 de febrero de 2012

Cubo en 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();      
}


trabajo de martes



Dimensión Fractal: Es un exponente que da cuenta de cuán completamente parece llenar un fractal el espacio conforme se amplía el primero hacia escalas más y más finas. No existe una única dimensión fractal sino una serie de dimensiones que frecuentemente resulta equivalentes pero no siempre. Entre estas definiciones está la dimensión de Hausdorff-Besicovitch, la dimensión de la dimensión de empaquetamiento, la dimensión de homotecia y las dimensiones de Rényi.

La Dimensión de Minkowski: El espacio de Minkowski (o espacio-tiempo de Minkowski) es una variedad lorentziana de cuatro dimensiones y curvatura nula, usada para describir los fenómenos físicos en el marco de la teoría especial de la relatividad de Einstein.
En el espacio de Minkowski pueden distinguirse tres dimensiones espaciales ordinarias y una dimensión temporal adicional, de tal manera que todas juntas forman una 4-variedad y así representar al espacio.

Ejemplos de Fractales de Conjunto de Koch y Julia.

Copo de Nieve de Koch.



Conjunto de Julia.


TRES TECNICAS COMUNES EN LOS FRACTALES:

Sistema de Funciones Iteradas (IFS) unos conjuntos se remplazan recursivamente por su imagen bajo un sistema de aplicaciones: el cojunto de Cantor, la alfombra de Sierpinsky, el triangulo de Sierpinsky, la curva de Peano, la curva del dragon, el copo de nieve de Koch o la esponja de Menger, son algunos ejemplos.

Fractales de Algoritmos de Escape, definidos por una relación, de recurrencia en cada punto del espacio (por ejemplo, el plano complejo): el conjunto de Mandelbrot, conjunto de julia, y el fractal de Lyanpuncy.

Fractales Aleatorios, generados por procesos estocásticos  no deterministas: el movimiento browniano, el vuelo de Levy, los paisajes fractales o los arboles brownianos. Esto


Escalares
Vectores
Puntos

miércoles, 8 de febrero de 2012

Glosario

SG - Son computacionalmente complejos de representar y procesar.

Tarjeta de vídeo - Es la encargada de realizar todo el procesamiento de información que conlleva los SG.

Monitores - Dispositivos de hardware que se encargan de procesar los datos recibidos por la tarjeta de vídeo y lo muestra de forma visible.

ADC - Convertidor analógico digital que se encarga de discretizar la imagen y procesarla.

Escaneres - Se encargan de leer a través de un sensor material impreso para poder representarlo en la computadora.

OCR - Representa datos textuales o bien procesa información como código de barras.

Formatos Gráficos Sin Compresion - Archivos que tienen un formato especial para representar gráficos.

Archivos - Se compone de una estructura con dos partes: encabezado y cuerpo.

Encabezado - Contiene datos de control sobre la imagen como es el tamaño, numero de controles, entre otros.

BMP - Este formato se caracteriza por ser una matriz de puntos donde cada punto tiene color asociado.

Formato RLE -  Formato sencillo en donde cada color consecutivo del mismo tipo es sustituido por dos valores.

GIF - Soporta colores de 8 bits, en el mismo archivo se encuentra la paleta de colores.

JPEG - Estándar ampliamente utilizado para codificar imágenes.

PNG - Formato especialmente diseñado para la web, el cual permite diversos grados de transparencia en las imágenes.

SVG - Formato basado XML que sirve para representar imágenes en  la web en formato vectorial.

MPEG - Utiliza el mismo algoritmo que JPEG pero aplicado a la imagen anterior.

MPEG-1 - Utilizado para Vídeo CD.

MPEG-2 - Se utiliza para DVD que tiene una calidad comparada a la de TV y HDTV.

MIDI - Permite representar el sonido instrumental de una canción con un formato muy básico.

Graficos en 3D - Son considerados formatos multimedia.

Render
Es un proceso de cálculo complejo desarrollado por un ordenador destinado a generar una imagen 2D a partir de una escena 3D.

Glosario