martes, 3 de diciembre de 2013

unidad 3










·                     Algoritmo DDA para generación de líneas


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.
Algoritmo DDApublic static void ddaDibujar(double x1,double y1,double x2, double y2) { double xinicial = x1, yinicial = y1, xfinal = x2, yfinal = y2,x,y; double deltax, deltay, xincremento, yincremento; double pasos; deltax = xfinal - xinicial; deltay = yfinal - yinicial; if (Math.Abs(deltax) > Math.Abs(deltay)) pasos = Math.Abs(deltax); else pasos = Math.Abs(deltay); xincremento = (deltax / pasos) / 10; yincremento = (deltay / pasos) / 10; x = xinicial; y = yinicial; Gl.glBegin(Gl.GL_POINTS); Gl.glVertex2d(x, y);//funcion que pinta un pixel en las coordenadas especificadas for (double k = .1; k <= pasos; k += .1) { x = (x + xincremento); y = (y + yincremento); Gl.glVertex2d(x, y); } Gl.glEnd(); //termina dda }
Código DDA en c#:using System;using System.Collections.Generic;using System.Linq;using System.Text;using Tao.OpenGl;using Tao.FreeGlut;using System.Runtime.InteropServices;namespace AlgoritmoDDA{class Program{static double x1, y1, x2, y2; static void Main(string[] args){Console.WriteLine("introduzca el valor de X1");x1 = Convert.ToDouble(Console.ReadLine());Console.WriteLine("introduzca el valor de Y1");y1 = Convert.ToDouble(Console.ReadLine());Console.WriteLine("introduzca el valor de X2");x2 = Convert.ToDouble(Console.ReadLine());Console.WriteLine("introduzca el valor de Y2");y2 = Convert.ToDouble(Console.ReadLine());Glut.glutInit();//funciones propias de openglGlut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB);Glut.glutInitWindowSize(640, 480);//creamos una ventanaGlut.glutCreateWindow("**************Algoritmo DDA**************");//colocamos titulo a la ventana//llamamos a la funcion ddaGlut.glutDisplayFunc(dda);Glut.glutMainLoop(); }public static void dda(){//componentes necesarios de openglGl.glClear(Gl.GL_COLOR_BUFFER_BIT);//limpia el buffer de la pantallGl.glColor3f(0.6F, 0.6F, 0.6F);//poner color a los pixelesGl.glLoadIdentity();//''muy importante;Gl.glPointSize(2.0f);//medida de los puntosGl.glBegin(Gl.GL_POINTS);//funcion para dibujar puntos//dibujando el planofloat z = -1, w = 1, c = 0;for (int i = 0; i < 200; i++){Gl.glColor3f(w, c, z);Gl.glVertex2d(z, 0);Gl.glVertex2d(0, w);z += .01f;w -= .01f;c += .1f;}Gl.glEnd();//termina funcion para dibujar puntos///pasamos las Gl.glPointSize(5.0f);//sirve para el tamaño de los pixelesGl.glColor3f(0.6f, 1.0f, 0.6f);//sirve para el color de los pixelesddaDibujar(x1, y1, x2, y2);}public static void ddaDibujar(double x1, double y1, double x2, double y2){double xinicial = x1, yinicial = y1, xfinal = x2, yfinal = y2, x, y;double deltax, deltay, xincremento, yincremento;double pasos;deltax = xfinal - xinicial;deltay = yfinal - yinicial;if (Math.Abs(deltax) > Math.Abs(deltay))pasos = Math.Abs(deltax);elsepasos = Math.Abs(deltay);xincremento = (deltax / pasos) / 10;yincremento = (deltay / pasos) / 10;x = xinicial;y = yinicial;Gl.glBegin(Gl.GL_POINTS);Gl.glVertex2d(x, y);//funcion que pinta un pixel en las coordenadas especificadasfor (double k = .1; k <= pasos; k += .1){x = (x + xincremento);y = (y + yincremento);Gl.glVertex2d(x, y);}Gl.glEnd();//termina dda}}} 




·                     Algoritmo de Bresenham para trazar líneasEl algoritmo de Bresenham es un algoritmo creado para dibujar rectas en los dispositivos de gráficos rasterizados, como por ejemplo un monitor de ordenador, que determina qué pixeles se rellenarán, en función de la inclinación del ángulo de la recta a dibujar.Algoritmo Bresenham:public static void BresenDibujar(double x1,double y1,double x2,double y2) { double xinicial = x1, yinicial = y1, xfinal = x2, yfinal= y2, x=0, y=0; double deltax, deltay, constanteP,ultimo; deltax = Math.Abs( xfinal - xinicial); deltay =Math.Abs( yfinal - yinicial); constanteP = 2 * deltay - deltax; if (xinicial > xfinal) { x = xfinal; y = yfinal; ultimo = xinicial; } else { x = xinicial; y = yinicial; ultimo = xfinal; } Gl.glBegin(Gl.GL_POINTS); //Gl.glColor3f(1f, 1.0f, .5f); Gl.glVertex2d(x, y); while (x < ultimo) { x += .1; if (constanteP < 0) constanteP +=2 * deltay; else { y += .1; constanteP += 2 * (deltay - deltax); } Gl.glVertex2d(x, y); } Gl.glEnd(); }
Código en c#:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Tao.OpenGl;using Tao.FreeGlut;using System.Runtime.InteropServices;
namespace AlgoritmoDDA{class Program{static double x1, y1, x2, y2;static void Main(string[] args){Console.WriteLine("introduzca el valor de X1");x1 = Convert.ToDouble(Console.ReadLine());Console.WriteLine("introduzca el valor de Y1");y1 = Convert.ToDouble(Console.ReadLine());Console.WriteLine("introduzca el valor de X2");x2 = Convert.ToDouble(Console.ReadLine());Console.WriteLine("introduzca el valor de Y2");y2 = Convert.ToDouble(Console.ReadLine());
//inicializar todo esto para tao openglGlut.glutInit();//funciones propias de openglGlut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB);Glut.glutInitWindowSize(640, 480);//creamos una ventanaGlut.glutCreateWindow("**************Bresenham**************");//colocamos titulo a la ventana//termina inicializacion de componentes tao opengl, llamamos a la funcion BresenGlut.glutDisplayFunc(Bresen);Glut.glutMainLoop();}
public static void Bresen(){//componentes necesarios de openglGl.glClear(Gl.GL_COLOR_BUFFER_BIT);//limpia el buffer de la pantallGl.glColor3f(0.6F, 0.6F, 0.6F);//poner color a los pixelesGl.glLoadIdentity();//''muy importante;Gl.glBegin(Gl.GL_POINTS);//funcion para dibujar puntos//dibujando el planofloat z = -1, w = 1, c = 0;for (int i = 0; i < 200; i++){Gl.glColor3f(w, c, z);Gl.glVertex2d(z, 0);Gl.glVertex2d(0, w);z += .01f;w -= .01f;c += .1f;}Gl.glEnd();//termina funcion para dibujar puntos///pasamos las Gl.glPointSize(5.0f);//sirve para el tamaño de los pixelesGl.glColor3f(1.0f, 0.111f, 1.0f);//sirve para el color de los pixelesBresenDibujar(x1, y1, x2, y2);//llama a la funcion bresenDibujar}public static void BresenDibujar(double x1, double y1, double x2, double y2){double xinicial = x1, yinicial = y1, xfinal = x2, yfinal = y2, x = 0, y = 0;double deltax, deltay, constanteP, ultimo;deltax = Math.Abs(xfinal - xinicial);deltay = Math.Abs(yfinal - yinicial);constanteP = 2 * deltay - deltax;if (xinicial > xfinal){x = xfinal;y = yfinal;ultimo = xinicial;}else{x = xinicial;y = yinicial;ultimo = xfinal;}Gl.glBegin(Gl.GL_POINTS);//Gl.glColor3f(1f, 1.0f, .5f);Gl.glVertex2d(x, y);while (x < ultimo){x += .1;if (constanteP < 0)constanteP += 2 * deltay;else{y += .1;constanteP += 2 * (deltay - deltax);}Gl.glVertex2d(x, y);}Gl.glEnd();}}}


 


robot....






diseño...

logotipo..curvas



galleta...




No hay comentarios:

Publicar un comentario