Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ANALISIS:
Se analizo que en el código de bresenham se realizan estas acciones
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.
También podemos deducir que el algoritmo de bresenham se puede adaptar para dibujar
cirulos o curvas mejor definidas, mientras que el algoritmo de DDA Se utiliza sobre todo para
dibujar líneas de triángulos y polígonos.
#include <stdlib.h>
#include <GL\glut.h>
#include <gl\glut.h>
#include <iostream>
#include <math.h>
glBegin(GL_POINTS);
glVertex2d(lx, ly);
glEnd();
glFlush();
}
void pintapantalla(){
glClearColor(1, 0, 0, 1);
glViewport(0, 0, alto, ancho);
glMatrixMode(GL_PROJECTION);
glPointSize(6);
glColor3i(1, 0, 0);
}
void mov_raton(int boton, int estado, int x, int y){
if ((estado == GLUT_DOWN) && (boton == GLUT_LEFT_BUTTON)){
x_1 = x;
y_1 = (ancho - y);
pintapixel1(x_1, y_1);
firstClick = false;
drawLine = false;
}
else if ((estado == GLUT_DOWN) && (boton == GLUT_RIGHT_BUTTON)){
x_2 = x;
y_2 = (ancho - y);
pintapixel2(x_2, y_2);
firstClick = true;
drawLine = true;
}
}
void setPixel(int x, int y){
glBegin(GL_POINTS);
glVertex2d(x, y);
glEnd();
}
void bresenhamX(int x0, int y0, int x1, int y1, int dx, int dy){
int i, j, k;
i = 2 * dy - dx;
j = 2 * dy;
k = 2 * (dy - dx);
if (!(x0<x1)){
swap(x0, x1);
swap(y0, y1);
}
setPixel(x0, y0);
while (x0<x1){
if (i<0)
i += j;
else{
if (y0<y1)
++y0;
else
--y0;
i += k;
}
++x0;
setPixel(x0, y0);
}
}
void bresenhamY(int x0, int y0, int x1, int y1, int dx, int dy){// funcion cordenada eje y
int i, j, k;
i = 2 * dy - dx;
j = 2 * dy;
k = 2 * (dy - dx);
if (!(y0<y1)){
swap(x0, x1);
swap(y0, y1);
}
setPixel(x0, y0);
while (y0<y1){
if (i<0)
i += j;
else{
if (x0<x1)
--x0;
i += k;
}
++y0;
setPixel(x0, y0);
}
}
void iniciar_pixelbre(){
glClear(GL_COLOR_BUFFER_BIT);// LIMPIA LA PANTALLA
if (drawLine)
{
linea_Bresenham(x_1, y_1, x_2, y_2);
}
glFlush();
}
double steps;
float x_inc, y_inc, x = x1, y = y1;
steps = (abs(dx)>abs(dy)) ? (abs(dx)) : (abs(dy));
x_inc = dx / (float)steps;
y_inc = dy / (float)steps;
glBegin(GL_POINTS);
glVertex2d(x, y);
for (int k = 0; k<steps; k++){// ayuda a decir en que momento deja de imprimir puntos
x += x_inc;
y += y_inc;
glVertex2d(round_value(x), round_value(y));
}
glEnd();
glFlush();
}