Codigo de Bresenham

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 3

#include <stdlib.

h>
#include<GL/glut.h>
#include <iostream>
#include<math.h>
int ancho = 500, largo = 500;
bool cli = false;
int xsub1 = 0; int ysub1 = 0;
int xsub2 = 0; int ysub2 = 0;

double dy; double dx;

void pixel(int x, int y,int color) {


glPointSize(5);//tamaño de pixel
if (color == 0){

glColor3f(1, 1, 0);//color del pixel


}
if (color == 1) {
glColor3f(0, 0, 0);
}
glBegin(GL_POINTS);//INICIAR EL MODO DE DIBUJO
glVertex2f(x, y);//dimension donde vamos a dibujar
glEnd();//FINALIZAR EL MODO DE DIBUJO
glutSwapBuffers();//para qeu el pixel se quede cuando refresque el buffer
}

int signo(int num)


{
int resultado;
if (num < 0)
resultado = 1;
else if (num > 0)
resultado = -1;
else if (num == 0)
resultado = 0;
return resultado;
}
void bresenham(int x0, int y0, int x1, int y1)
{
int p, x, y, s1, s2, e, i, intercambio;

x = x1;
y = y1;

dx = abs(x1 - x0);
dy = abs(y1 - y0);

s1 = signo(x1 - x0);
s2 = signo(y1 - y0);

if (dy > dx)


{
p = dx;
dx = dy;
dy = p;
intercambio = 1;
}
else {

intercambio = 0;
}
e = 2 * dy - dx;
for (i = 1; i <= dx; i++)
{
pixel(x, y,0);
if (e >= 0)
{
if (intercambio == 1)
{
x = x + s1;
}
else
{
y = y + s2;
}
e = e - (2 * dx);
}
if (intercambio == 1) {

y = y + s2;
}
else {
x = x + s1;
}
e = e + 2 * dy;
}
}

void mouse(int btn, int state, int x, int y) //estado del mause y coordenadas
{

//glClear(GL_COLOR_BUFFER_BIT);

if (cli == false) {

if (btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {


xsub1 = x;
ysub1 = y;
pixel(x, y,0);
cli = true;
}
}

if (cli == true) {

if (btn == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {


xsub2 = x;
ysub2 = y;
pixel(x, y,0);
glFlush();
bresenham(xsub1, ysub1, xsub2, ysub2);
cli = false;
}
}

glFlush();
}
void plano() {
for (int i = 0; i < ancho; i++) {
pixel(ancho / 2, i,1);
pixel(i, largo / 2,1);

}
glFlush();
glutMouseFunc(mouse);
}
int main(int argc, char* argv[]) {
glutInit(&argc, argv);//libreria en modo grafico
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//DISPLAY COLOR DE LA PANTALLA y
double el intercambio de un pixel a otro
glutInitWindowSize(ancho, largo);//tamaño de pantalla
glutInitWindowPosition(100, 100);//posicion donde aparecera cuando abramos el
programa
glutCreateWindow("linea entre dos puntos");//crear ventana con las
caracteristicas dichas y el titulo
gluOrtho2D(0, ancho, largo, 0);//para el dibujado
glClearColor(1, 1, 1, 1);//canales de los colores
//glutDisplayFunc(display);//se ejecuta cada vez que tengamos que redibujar
el pixel
glutDisplayFunc(plano);

glutMainLoop();//repetir el roceso de dibujado


return 0;
}

También podría gustarte