1.- ALGORITMO PARA DIBUJO DE LINEAS Algoritmo básico El algoritmo básico utiliza la ecuación de la recta expresada como y = mx + b Si la recta se dibuja desde el punto (x0, y0) hasta el punto (x1, y1), el algoritmo varia x desde x0 hasta x1 en incrementos de una unidad. El siguiente es el código en Java. publicvoidrectaSimple(int x0, int y0, int x1, int y1, Graphics g){ int dx = x1 - x0; intdy = y1 - y0; g.drawLine( x0, y0, x0, y0);//funciona!! if (dx != 0){ float m = (float) dy / (float) dx; float b = y0 - m*x0; if(x1 > x0) dx = 1; else dx = -1; while (x0 != x1) { x0 += dx; y0 = Math.round(m*x0 + b); g.drawLine( x0, y0, x0, y0); } } } 2.- METODO DIRECTO Este método permite dibujar una línea, entre los puntos (xi,yi) y (xf,yf), utilizando la ecuación y = mx + b generando a continuación la secuencia (xi+1 = xi + Δx, round (yi+ 1)). Con este cálculo se obtiene el píxel más cercano o sea aquel cuya distancia a la recta es menor. Este método no es tan eficiente debido a que en cada iteración se requiere una multiplicación y una suma en punto flotante, más la invocación del método de truncamiento. El uso de la función de redondeo y el hecho de que para cada valor (discreto) de x se grafica un solo valor de y, ocasiona que la gráfica sea discontinua para |m|>1.
3.- ALGORITMO DDA Como todos saben Open GL es una herramienta que nos facilita mucho la generación de gráficos por computadora. Aqui aplicamos conocimientos matemáticos, usando Open GL para generar rectas, corcunferencias, elipses, etc. 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.
Código: void DDA(int x0,int y0,int xFin,intyFin) { int dx = xFin - x0, dy = yFin - y0, steps, k; floatxIncremento, 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)); } } 4.- Algoritmo de Bresenham Para aplicar el método punto medio, se debe definir una función de circunferencia como: f circunferencia (x , y)= x2 + y2 - r2 f circunferencia (x , y)= 0. Si el punto estpa en el interior de la circunferencia, la función de la circunferencia es negativa; y si está en su exterior, es positiva Al igual que en el algoritmo para el trazo de líneas de Bresenham, el método del punto medio calcula las posiciones de pixel a lo largo de una circunferencia utilizando adiciones y sustracciones de enteros, si se supone que los parámetros de la circunferencia se especifican en coordenadas enteras de pantalla. Se pueden 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 xkposición, al iniciar en k = 0, se realiza 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. 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 donde 2xk+1 = 2xk + 2 y 2yk+1 = 2yk -2. 4. Se determinan puntos de simetría en los otros siete octantes.
5. Se mueve cada posición de pixel calculada (x , y) a la trayectoria circular centrada en (xc , yc)setrazan los valores de las coordenadas: x = x + xc y= y + yc . 6. Se repiten los pasos 3 a 5 hasta que x ≥ y. El algoritmo busca cual de dos píxeles es el que estamas 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.
1. Se capturan los dos extremos de la línea y se almacena el extremo izquierdo en (x0,y0). 2. Se traza el primer punto (x0, y0). 3. Se calculan las constantes y, x, 2 y, 2 y-2 x, y se obtiene el valor inicial para el parámetro de decisión como p0 = 2 y - x. 4. En cada xka lo largo de la línea, que inicia en k = 0, se efectúa la prueba siguiente: sipk< 0, el siguiente punto que se debe trazar es (xk+1, yk) y pk +1 = pk+ 2 y. De otro modo, el siguiente punto en trazarse es (xk+1, yk+1) y pk+1 = pk + 2 y 2 x. 5. Se repite el paso 4 otras xveces. voidLineBres(Graphics g, int x0, int y0, int x1, int y1){ int x, y, dx, dy, xend, p, incE, incNE; dx = abs(x1 - x0); dy = abs(y1 - y0); p = 2*dy - dx; incE = 2*dy; incNE = 2*(dy-dx); /* determinarque punto usar para empezar, cual para terminar */ if (x0 > x1) { x = x1; y = y1; xend = x0; } else {
x = x0; y = y0; xend = x1; } g.drawLine( x0, y0, x0, y0); /* se cicla hasta llegar al extremo de la línea */ while (x <= xend){ g.drawLine(x,y,x,y); x = x + 1; if (p < 0) p = p + incE else { y = y + 1; p = p + incNE; } g.drawLine( x0, y0, x0, y0); } } 5.- ALGORITMOS PARA GENERAR CÍRCULOS /* * Algoritmo de dibujo de un Círculo basado en la ecuación Canónica */ voiddibujarCirculoCanonica(int r, int xc, intyc) { int x = 0; int y = r; while (x <= y) { this.dibujarPunto(x + xc, y + yc); x++; double yd = Math.sqrt(r * r - x * x); y = (int) Math.round(yd); } } /* * Algoritmo para el dibujo de círculo basado en la ecuación parámetrica * polar de la circunferencia. */ voiddibujarCirculoPolar(int r, int xc, intyc) { // Determinar el angulo de variación double theta = Math.toRadians(0); // Punto inicial int x = r; int y = 0;
// Mientras el angulo no exceda a 360 dibujar puntos while (theta <= 2*Math.PI) { this.dibujarPunto(x + xc, y + yc); // Incrementar el ángulo theta=theta+Math.toRadians(5); // Cálcular los valores x e y de forma parámetrica doublexd = r * Math.cos(theta); x = (int) Math.round(xd); double yd = r * Math.sin(theta); y = (int) yd; } }
/* * Algoritmo para el dibujo de Círculo con el algoritmo de * punto medio */ publicvoiddibujarCirculoPuntoMedio(int r, int xc, intyc) { // Punto inicial del círculo int x = 0; int y = r; // Cálcular el parámetro inicial de decisión intpk = 1-r; // verificar el pk para determinar las posiciones de pixel siguuientes while (x<=y) { System.out.println("(x,y)= "+x+","+y+" pk="+pk); dibujarPunto(xc+x,yc+y); if (pk<0){ pk+=2*(x+1)+1; x++; } else // pk>=0 { pk+=2*(x+1)+1 - 2*(y-1); x++; y--; } } } /* * Algoritmo para el dibujo de Círculo con el algoritmo implementado * porOpenGL.
*/ voiddibujarCirculoOpenGL(int r, int xc, intyc) { } /* * Dibujar un punto */ protectedvoiddibujarPunto(int x, int y) { gl.glPointSize(2); gl.glBegin(GL.GL_POINTS); gl.glVertex2i(x, y); gl.glEnd(); } } Resultado de la aplicación:
6.-ALGORITMO PARA GENERAR UNA ELIPSE Algoritmo de punto medio para elipse publicvoid Elipse(Graphics g, int xc, intyc, intrx, intry){ int x, y, p, px, py; int rx2, ry2, tworx2, twory2; ry2 = ry*ry; rx2 = rx*rx; twory2 = 2 * ry2; tworx2 = 2 * rx2; /* región 1 */ x = 0; y = ry; PlotPoint(x,y); p = (int)Math.round(ry2 - rx2*ry + 0.25*rx2); px = 0;
py = tworx2*y; while (px
0) { /* se cicla hasta trazar la región 2 */ y = y - 1; py = py - tworx2; if (p > 0) p = p + rx2 - py; else { x = x + 1; px = px + twory2; p = p + rx2 + py + px; } PlotPoint(x,y); } }
El siguiente applet permite seguir paso a paso el agoritmo de punto medio para elipses. Haga clic sobre el área cuadriculada para establecer el centro de la elipse. A continuación vuelva a hacer clic para definir los radios en x y y. El radio en x es la distancia en x entre el primer clic y el segundo y el radio en y es la distancia en y entre el primer clic y el segundo.
7.- ALGORITMOS PARA GENERACIÓN DE PARABOLA Parábola publicvoidparabola(Graphicsg,int xc, intyc, int p, intbound){ intx,y,d;
int p2, p4; p2 = 2*p; p4 = 2*p2; x = 0; y = 0; d = 1 - p; //region 1 while(y < p && x<=bound){ g.drawLine(xc+x,yc+y,xc+x,yc+y); g.drawLine(xc+x,yc-y,xc+x,yc-y); if(d >= 0){ x++; d = d - p2; } y++; d = d + 2*y +1; } if(d == 1) d = 1 - p4; else d = 1 - p2; //region 2 while(x<=bound){ g.drawLine(xc+x,yc+y,xc+x,yc+y); g.drawLine(xc+x,yc-y,xc+x,yc-y); if(d <= 0){ y++; d = d + 4*y; } x++;
d = d - p4; } } 8.- TRASLACIÓN EN EL PLANO 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. Convertimos un punto bidimensional al agregar las distancias de traslación, tx y ty la posición de coordenadas original (x,y) El par de distancia de traslación se llama vector de traslación o vector de cambio. Se pueden expresar las ecuaciones anteriores en una sola ecuación matricial al utilizar vectores de columna para representar las posiciones de coordenadas y el vector de traslación Los polígonos se trasladan al sumar el vector de traslación a la posición decoordenadas de cada vértice y se vuelve a generar el polígono utilizando un nuevo conjuntode coordenadas y vértices y las especificaciones actuales de los atributos.
9.- ROTACIÓN EN EL PLANO 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 . Para generar una rotación, especificamos un ángulo de rotación θ y la posición (x r , y r ) del punto de rotación (o punto pivote) en torno al cual se gira el objeto.
10.-Escalación Una transformación de escalación altera el tamaño de un objeto. Se puede realizar esta operación para polígonos al multiplicar los valores de coordenadas (x, y) de cada vértice por los factores de escalación s x y s y para producir las coordenadas transformadas (x’, y’ ) 11.-REPRESENTACION DE MATRIZ Y COORDENADAS HOMOGÉNEAS
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 posiciones 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. Es posible expresar cada una de las transformaciones básicas en la forma de matriz general con las posiciones de coordenadas P y P’ representadas como columnas de vector.2.15.P'=M1·P+M 12.-Transformaciones Compuestas 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 P1P2yP1P3 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, ). Las longitudes de las líneas no se verán afectadas por la transformación.
Las transformaciones entre sistemas de coordenadas cartesianos se llevan a cabo con una secuencia de transformaciones traslación. Rotación que hacen que los dos sistemas coincidan. Especificamos el origen de coordenadas y vectores de eje para un marco de referencia respecto al marco de referencia original. En un sistema bidimensional, un vector define completamente las direcciones del eje de coordenadas; pero en un sistema tridimensional, hay que especificar dos de las tres direcciones de los ejes. Las transformaciones geométricas son transformaciones afines. Esto es, pueden expresarse como una función lineal de posiciones de coordenadas. Traslación, rotación y escalación son transformaciones afines. Transforman líneas paralelas en líneas paralelas y posiciones de coordenadas finitas en posiciones finitas. 13.-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 seleccionado (xr, yr) al realizar la siguiente secuencia de operaciones de traslación-rotación-traslación: 1. Traslade el objeto de modo que se mueva la posición del punto pivote al origen de las coordenadas. 2. Gire el objeto con respecto del origen de las coordenadas
14.-ROTACION DE EJES CORDENADAS Cambio de la orientación de los ejes de referencia mientras se conserva el origen. La principal razón para rotar los ejes es que una ecuación dada es mucho más simple en el nuevo sistema de coordenadas que en el sistema original. Si los ejes originales x y y rotan en sentido contrario al reloj un ángulo , para cualquier punto P(x, y), las coordenadas originales (x, y) se convierten en las nuevas coordenadas (x ´, y ´), que son: x ´ = xcos + ysen y´ = - xsen + ycos Para derivar la ecuación en las nuevas coordenadas, necesitamos expresar las coordenadas originales en las nuevas coordenadas: x = x ´ cos - y ´ sen y = x ´ sen + ycos Como ejemplo de rotación, considera una ecuación simple y = x + 21/2, que es una línea. Si los ejes originales x e y rotan en sentido contrario al reloj un ángulo de 45°, las coordenadas originales se pueden expresar como: x = x ´ cos 45° - y ´ sen 45° y = x ´ sen 45° + y ´ cos 45° Por lo tanto, x = x ´ (21/2/2) - y ´ (21/2/2) y = x ´ (21/2/2) + y ´ (21/2/2) Entonces, la ecuación y = x + 21/2 se convierte en: x ´ (21/2/2) + y ´ (21/2/2) = x ´ (21/2/2) - y ´ (21/2/2) + 21/2 y´=1 En las nuevas coordenadas, la ecuación es una línea paralela al eje x ´, +1 unidad separada del eje x ´. 16.-VISTAS Y PROYECCIONES TRIDIMENCIONALES
Si situamos un observador según las seis direcciones indicadas por las flechas, obtendríamos las seis vistas posibles de un objeto.
SISTEMA EUROPEO Y AMERICANO DE VISTAS SISTEMA EUROPEO DE VISTAS
SISTEMA AMERICANO
Una vez realizadas las seis proyecciones ortogonales sobre las caras del cubo, y manteniendo fija, la cara de la proyección del alzado (A), se procede a obtener el desarrollo del cubo, que como puede apreciarse en las figuras, es diferente según el sistema utilizado. SISTEMA EUROPEO
SISTEMA AMERICANO
El desarrollo del cubo de proyección, nos proporciona sobre un único plano de dibujo, las seis vistas principales de un objeto, en sus posiciones relativas.
Con el objeto de identificar, en que sistema se ha representado el objeto, se debe añadir el símbolo que se puede apreciar en las figuras, y que representa el alzado y vista lateral izquierda, de un cono truncado, en cada uno de los sistemas.
Como se puede observar en las figuras anteriores, existe una correspondencia obligada entre las diferentes vistas. Así estarán relacionadas: Teniendo en cuenta las correspondencias anteriores, implicarían que dadas dos cualquiera de las vistas, se podría obtener la tercera, como puede apreciarse en la figura:
También, de todo lo anterior, se deduce que las diferentes vistas no pueden situarse de forma arbitraria. Aunque las vistas aisladamente sean correctas, si no están correctamente situadas, no definirán la pieza.
17.-ESPESIFICACION DEL PLANO DE VISTA Características generales de los Planos Un plano, de acuerdo con sus características puede dibujarse: a) A escala Natural b) Ampliado c) Reducido
Tipos de planos Los planos los podemos clasificar en: a) Planos de diseño. b) Planos de conjunto o ensamblaje c) Planos de subconjuntos d) Planos de fabricación y ensamblaje e) Planos de detalle f) Planos de perspectiva explosiva. g) Planos para catálogos. 18.-PROYECCION PARALELA EN LOS TRES PLANOS PROYECCIONES PARALELAS:es un sistema de representación gráfica para trasponer un objeto tridimensional a un dibujo bidimensional en un plano, llamado plano de proyección. Consiste en proyectar puntos del espacio contra el plano de proyección mediante haces de rectas siempre paralelas entre sí. Esta técnica de representación gráfica se utiliza en diseños de ingeniería y arquitectura ya que su principal ventaja es que mantiene las proporciones relativas de lo representado y se puede medir sobre él directamente. De esta manera se puede reconstruir el objeto fácilmente a partir de representaciones concretas.
perspectivatrimetica: es una proyección anoxonometrica , para representar volúmenes, en la cual el objeto tridimensional se encuentra inclinado con respecto al «plano del cuadro» de forma que sus tres ejes principales experimentan reducciones diferentes.
Representación en un plano de dibujo
Cuando queremos representar en un plano de dibujo (o lámina) ese plano paralelo al Plano Horizontal (PH) tenemos que saber que lo que representamos son sus proyecciones. De esta forma, tendremos que “romper” la esctrutura de los tres planos (PH, PV y PP) por la línea de intersección entre los planos horizontal y de perfil, y girar los planos horizontal y de perfil, hasta hacerlos coincidir con el Plano Vertical (PV).
Cuando giramos un plano, gira con todo lo que contiene. Esto se representa en el plano del dibujo o lámina y tendríamos el trabajo resuelto. Se considera que los planos de proyección son infinitos, por lo que no se deben dibujar los limites de los planos PV, PH y PP. En la lámina o plano de dibujo, deberán quedar las proyecciones horizontal, vertical y de perfil.
Planos paralelos a los planos de proyección Según lo visto en el apartado anterior, podemos ver que las proyecciones están en verdadera magnitud en el plano de proyección con el que son paralelos. Con el otros planos, se actua de la misma forma:
Plano paralelo al Plano Vertical (PV) El plano rectangular, paralelo al Plano Vertical de proyección, está en verdadera magnitud en su proyección de vertical, mientras que las proyecciones horizontal y de perfil, son una recta de las dimensiones del tamaño del plano.
Plano paralelo al Plano Horizontal (PH) En este caso, el plano se ve en verdadera magnitud en la proyección horizontal, mientras que las proyecciones vertical y de perfil, son una recta.
Plano paralelo al Plano de Perfil (PP) De forma análoga a los casos anteriores, tenemos la verdadera magnitud en la proyección de perfil. Las otras dos proyecciones, son rectas.
19.-ALGORITMO PARA DIBUJAR UN RELOJ DIGITAL EN PANTALLA
20.- RECORTE DE LINEAS Y POLIGONOS 1. Polígonos que admiten representación exacta. A. Conociendo el radio.
3, 6, 12 LADOS. Fig.51
Polígonos regulares de 3, 6, y 12 lados, conociendo el radio de la circunferencia.
4, 8, 16 LADOS. Fig.52
Polígonos regulares de 4, 8, y 16 lados, conociendo el radio de la circunferencia.
5, 10 LADOS. Fig.53
Polígonos regulares de 5 y 10 lados, conociendo el radio de la circunferencia. B. Conociendo el lado.
5 LADOS. Figs.54 A y B
Polígonos regulares de 5 lados, conociendo el lado.
3, 6, 12 LADOS. Figs.55 A, B y C.
Polígonos regulares de 3, 6 y 12 lados, conociendo el lado.
4, 8, 16 LADOS. Fig.56 A, B y C
Polígonos regulares de 4, 8, 16 lados, conociendo el lado.