Está en la página 1de 3

#include <stdlib.

h>
#include <iostream>
#include <GL/glut.h>
#include <math.h>
using namespace std;

int ancho = 1000, alto = 1000, color;


char op;
bool click = false, click2=false;
double xini, xfin, yini, yfin;
float t = 0, u = 1;

void display()
{
glFlush();
}

void pintaPixel(int x, int y) {//parametros tipo entero


glPointSize(1);//Tamaño del punto(pixel)
if (t < 1) { glColor3f(1, 0, t); }
if (t >= 1) { glColor3f(u + 1, 0, 1); }
if (t >= 2) { glColor3f(0, t - 2, 1); }
if (t >= 3) { glColor3f(0, 1, u + 3); }
if (t >= 4) { glColor3f(t - 4, 1, 0); }
if (t >= 5) { glColor3f(1, u + 5, 0); }
if (t >= 5) { t = 0; u = 1; }

glBegin(GL_POINTS);//vertices de la primitiva,vertice como un solo punto


glVertex2f(x, y);//vertices del puntos tipo float
glEnd();
glutSwapBuffers();//misma funcion que glFlush()
}

void Circulo() {
double radio;
radio = sqrt(pow(xfin - xini, 2) + pow(yfin - yini, 2));
double y = radio,x=0;
do {
y = sqrt((radio + x) * (radio - x));
pintaPixel(y +xini, x + yini);
pintaPixel(x + xini, y + yini);
pintaPixel(y + xini, (-x) + yini);
pintaPixel(x + xini, (-y) + yini);
pintaPixel((-x) + xini, (-y) + yini);
pintaPixel((-y) + xini, (-x) + yini);
pintaPixel((-y) + xini, x + yini);
pintaPixel((-x) + xini, y + yini);
x++;
} while (x <= y);

void DDA(int x1, int x2, int yuno, int y2) {


int k;
double x, y, dx, dy, otro;
if (abs(x2 - x1) >= abs(y2 - yuno)) {
otro = abs(x2 - x1);
}
else {
otro = abs(y2 - yuno);
}
dx = (x2 - x1) / otro;
dy = (y2 - yuno) / otro;
k = 1;
x = (double)x1;
y = (double)yuno;
while (k <= otro) {
pintaPixel(roundf(x), roundf(y));
x = x + dx;
y = y + dy;
k++;
}
}

void raton(int btn, int state, int x, int y) {// parametros de botón, estado,
coordenadas
if (click == false) {
if (btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
xini = x;
yini = y;
pintaPixel(xini, yini);
click = true;
}
}
else {
if (btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
xfin = x;
yfin = y;
pintaPixel(xfin, yfin);
click = false;
glFlush();
Circulo();
}
}

if (click2 == false) {
if (btn == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {
xini = x;
yini = y;
pintaPixel(xini, yini);
click2 = true;
}
}
else {
if (btn == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {
xfin = x;
yfin = y;
pintaPixel(xfin, yfin);
click2 = false;
glFlush();
DDA(xini, xfin, yini, yfin);
}
}

t = t + 0.1;
u = u - 0.1;
glFlush();
}

int main(int argc, char** argv)


{
glutInit(&argc, argv);//inicializar glutInit
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);//cuantos y que buffers, ademas
de color RGB alfa bidimencional
glutInitWindowSize(ancho, alto);//Valores dados para generar la pantalla
glutCreateWindow("Pintar Linea");//Titulo de la ventana
gluOrtho2D(0, ancho, alto, 0);// punto exacto de la ventana
glutInitWindowPosition(800, 0);
glClearColor(1, 1, 1, 0);//color de la ventana RGB alfa bidimencional
glutDisplayFunc(display);//se ejecuta cada vez que tengamos que redibujar un
pixel
glutMouseFunc(raton);//Estado del mouse
glutSwapBuffers();
glutMainLoop();//se repite constante mente para no salir de la ventana

return 0;
}

También podría gustarte