Está en la página 1de 2

#include <stdlib.

h>
#include <GL\glut.h>
#include <iostream>
#include <math.h> //Librería que permite usar potencias, raíces entre otros
using namespace std;

float X = 0; // variables x & y globales


float Y = 0;
float X2 = 0;
float Y2 = 0;
float ancho = 500, alto = 500;// tamaño ventana

void iniciar() {
glClearColor(0.1, 2, 0,0);
glPointSize(9);
glColor3f(0.1,0.2,0.0);
gluOrtho2D(0, ancho, alto, 0);// visualizar mejor el pixel y este mejor situado con el
mouse

void imprimeCirculo(float x1, float y1, float x2, float y2) {

glBegin(GL_POINTS);// inicializo puntos

float r = pow((x2 - x1), 2) + pow((y2 - y1), 2);//con esto obtenemos el radio del circulo
r = sqrt(r); // ========

float xi = x1 - r; //Indica donde inician las x que crean el circulo


float xf = x1 + r; //Indica donde se encuentra la última x que conforma el circulo
float xi1 = 0; //Remplaza las x en la fórmula de manera incremental
float yp2 = 0; //remplaza las y en las coordenadas inversas en la formula -
float yp = 0; //remplaza las y en las coordenadas de la formula +

cout << "radio: " << r << endl;

cout << "1 cordenada: " << x1;


cout << " , " << y1 << endl; //imprime en consola la coordenada del centro
glVertex2f(x1, y1); //Imprime el centro

cout << "2 cordenada: " << x2;


cout << " , " << y2 << endl; //Imprime en consola la coordenada del final del radio
glVertex2f(x2, y2); //Imprime en pantalla el punto que conforma el final del radio

cout << "\n";


cout << "x inicial " << xi << " x final: " << xf << endl;
cout << "\n *** \n";

for (int i = xi; i <= xf*2; i++) {


yp = y1 + sqrt(pow(r, 2) - pow((xi - x1), 2)); //formula que nos despeja las y en
+ respecto a xi que se incrementa x1 es el centro
yp2 = y1 - sqrt(pow(r, 2) - pow((xi - x1), 2)); //formula que nos despejas
las y en - respecto a xi que se incrementa

xi1 = xi;
glVertex2i(xi1, yp);
glVertex2i(xi1, yp2);
cout << xi << " , " << yp << endl;
cout << "imprimiendo" << endl;
xi+=0.5;
}
X = 0;
Y = 0;
X2 = 0;
Y2 = 0;

glEnd();// deja de crear puntos


glFlush();
}

void raton(int btn, int state, int x, int y) {


if (X == 0) { //esta línea comprueba que la primera coordenada este vacía y le
asigna un valor, si ya lo tiene continua con la siguiente
X = x;
Y = y;
}
else { //aquí se asigna el segundo
valor o coordenada para almacenarla
X2 = x;
Y2 = y;
imprimeCirculo(X, Y, X2, Y2);
}
glClear(GL_COLOR_BUFFER_BIT);
}

int main(int argc, char * argv[])


{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowSize(ancho, alto);
glutCreateWindow(" Circunferencia (Maira Valentina)");
glutDisplayFunc(iniciar);// dando uso a la función pintar
glutMouseFunc(raton);// usar los comandos del mouse
glutMainLoop();

return 0;
}