Canales populares

Poligonos Regulares OpenGl C++

Bueno a continuacion les presento un programa capaz de realizar poligonos regulares desde triangulo hasta el Tridecágono (Poligono de 13 lados), bueno en realidad podrias modificar el programa para que al llamar a una tecla se incremente el numero de lados hasta (n)  bastaria con poner un acumulador numLados += 1(si vamos de uno en uno) y de incrementar los array's donde guardo los puntos (ya que los defini de un tamaño de 13), pero eso dependera de cada quien y ojala lo hagan es sencillo, este programa esta escrito en C++ y utiliza la libreria de GLUT de OpenGl
OpenGl es una API que nos brinda graficos. Ya no es necesario el tener que programar nuestro algoritmos para lineas pues en OpenGl cuenta con Primitivas que dibujan lineas, puntos,circulos,poligonos y cuerpos geometricos entre otros. 


Sin mas les dejo mi pequeño programa
PD: Es necesario tener las libreria de GLUT para la ejecucion. Incluye las trasformaciones del poligono como los son escalamiento, traslacion y rotacion


// PoligonosOpenGL.cpp: define el punto de entrada de la aplicación de consola.
//


#include "stdafx.h"
#include
#include
#include
#include
#include
#define M_PI 3.14159265358979323846
using namespace std;


GLfloat xi = 0.0;
GLfloat yi = 0.0;
GLint numLados=3;
GLint escala = 1;
GLdouble puntosx[13];
GLdouble puntosy[13];
GLdouble angulo = 0;






void init(void){
glClearColor(0.0, 0.0, 1.0, 0.0);
}




void ArrowKey(int key, int x, int y){
switch (key)
{
case GLUT_KEY_RIGHT:
if (xi < 10)
xi += 0.5;
break;


case GLUT_KEY_LEFT:
if (xi > -10)
xi -= 0.5;
break;


case GLUT_KEY_UP:
if (yi < 10)
yi += 0.5;
break;


case GLUT_KEY_DOWN:
if (yi > -10)
yi -= 0.5;
break;
case GLUT_KEY_F3:
numLados = 3;
//triangulo
break;


case GLUT_KEY_F4:
numLados = 4;
//cuadrado
break;
case GLUT_KEY_F5:
numLados = 5;
//pentagono
break;
case GLUT_KEY_F6:
numLados = 6;
//hexagono
break;


case GLUT_KEY_F7:
numLados = 7;
//heptagono
break;
case GLUT_KEY_F8:
numLados = 8;
//octagono
break;


case GLUT_KEY_F9:
numLados = 9;
//
break;


case GLUT_KEY_F10:
numLados = 10;
//
break;
case GLUT_KEY_F11:
numLados = 11;
//
break;
case GLUT_KEY_F12:
numLados = 12;
//
break;

case GLUT_KEY_HOME:
if (escala > 5)
escala = 5;
cout << "Aumentando Escala" << endl;
escala = escala + 1;
break;
case GLUT_KEY_PAGE_UP:
if (escala <=1)
escala = 1;
cout << "Reduciendo Escala" << endl;
escala = escala - 1;
break;


case GLUT_KEY_PAGE_DOWN:
cout << "Rotando positivamente" << endl;
angulo +=5;




break;


case GLUT_KEY_END:
cout << "Rotando negativamente" << endl;
angulo -=5;
break;


default:
break;
}




}




void display(void){
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glPushMatrix();
glTranslatef(xi, yi, 0);
glScaled(escala, escala, 1.0);
glRotated(angulo, 0.0, 0.0, 1.0);






double grados = (360 / numLados);
double aux = grados;


for (int i = 0; i
{


GLdouble px = ((2 * (cos((M_PI*grados) / 180))) + xi);
GLdouble py = ((2 * (sin((M_PI*grados) / 180))) + yi);




puntosx = px;
puntosy = py;



grados = grados + aux;




}

glBegin(GL_POLYGON);
glColor3f(1.0,0.5,0.0);
for (int i = 0; i
{
glVertex2d(puntosx, puntosy);
   }






glEnd();





glPopMatrix(); // Cierra la matriz




glFlush();
glutSwapBuffers();
}
void reshape(int w, int h){
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();//Inicializa la matriz de proyeccion
glOrtho(-10.0, 10.0, -10.00, 10.0, 0.1, 20.0); // WorkSpace
glMatrixMode(GL_MODELVIEW); // cambiamos la matrix


}
void keyboard(unsigned char key, int x, int y){
switch (key)
{
case 27:
exit(0);
break;
}
}










int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(400, 300);
glutInitWindowPosition(100, 100);
glutCreateWindow("Eli Alejandro Salinas Perez");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutIdleFunc(display);
glutKeyboardFunc(keyboard);
glutSpecialFunc(ArrowKey);
glutMainLoop();






return 0;
}






Muestras en capturas de pantalla








Aqui el archivo en cpp


https://drive.google.com/file/d/0B6H2cOm_wRaDa2JmVHVidkdLLXc/view?usp=sharing




Y todas las noches bajo la Via Lactea parecen eternas si tu no estas

0No hay comentarios