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....
galleta...
No hay comentarios:
Publicar un comentario