elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Disparo parabolico en c++ con la libreria GLUT en: 26 Marzo 2023, 05:12 am
necesito su ayuda o sugerencias para resolver el siguiente problema: crear una funcion proyectil la cual mediante el teclado se pueda controlar su potencia de disparo. Lo intente hacer pero no me salio,  no se como hacer los calculos e implementarlos en el codigo. Este el codigo que llevo hasta ahora:

Librerias

Código:
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <gl\glut.h>
using namespace std;

Variables globales

Código:
float g = 9.8, v = 12, ang = 45; 

Funcion dibujar

Código:
void Dibujar(){
glClear(GL_COLOR_BUFFER_BIT); //borra la pantalla grafica como un cls

glColor3f(1.0, 0.0, 0.0);

crea los ejes x e y

Código:
glBegin(GL_LINES);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(30.0, 0.0, 0.0);
glVertex3f(0.0, 30.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glEnd();

bloque de código dibuja una trayectoria de puntos verdes en la pantalla

Código:
glBegin(GL_POINTS); //indica que se dibujarán puntos
float rad = ang/57.3; //convierte el ángulo ang (en grados) a radianes.
 for(float x = 0; x <= 1000; x = x + 0.2){
    float y = tan(rad)*x-(g/(2*v*v*cos(rad)*cos(rad)))*x*x; //calcula la posición
 //vertical y correspondiente a la posición horizontal x en la trayectoria, utilizando
 //la fórmula de la trayectoria de un proyectil
    glColor3f(0.0, 1.0, 0.0);
    glVertex3f(x, y, 0.0);
    if(y<0) {break;} //detiene el bucle si la posición vertical y es negativa, lo que
    //significa que el proyectil ha caído al suelo.
    }
glEnd();

glFlush();
}

función que establece la perspectiva y la posición de la cámara para que se pueda ver la escena correctamente en la ventana de visualización.

Código:
void CambiarTamano(int ancho, int alto){
if(alto == 0) alto = 1;
float razon = 1.0*ancho/alto;
glMatrixMode(GL_PROJECTION); //activaq el modo de proyeccion
glLoadIdentity(); //carga la imagen
glViewport(0, 0, ancho, alto);
gluPerspective(45, razon, 1, 1000); //cambia la perspectiva de acuerdo a la razon
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(10.0, 7.0, 20.0, //donde esta la camara
      10.0, 7.0, 0.0, //hacia donde esta viendo
      0.0, 1.0, 0.0); //cual es el eje hacia arriba
}

función que se llama cuando se presiona una tecla especial del teclado mientras se está ejecutando el programa

Código:
void Flechas(int key, int x, int y){
switch(key){
case GLUT_KEY_UP: ang +=1; Dibujar(); break;
case GLUT_KEY_DOWN: ang -=1; Dibujar(); break;
case GLUT_KEY_RIGHT: v +=1; Dibujar(); break;
case GLUT_KEY_LEFT: v -=1; Dibujar(); break;
}
}

Se inicia la biblioteca GLUT (glutInit) para configurar la ventana, los modos de visualización, la posición y el tamaño. Después, se registran las funciones de control de eventos con GLUT (glutSpecialFunc, glutDisplayFunc, glutReshapeFunc). Por último, se llama a glutMainLoop para iniciar el bucle de eventos de GLUT y mantener la ventana abierta hasta que el usuario la cierre.

Código:
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(30, 30);
glutInitWindowSize(1000, 600);
glutCreateWindow("Prueba");
glutSpecialFunc(Flechas);
glutDisplayFunc(Dibujar);
glutReshapeFunc(CambiarTamano);
glutMainLoop();

return 0;
}


Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines