//Inicializando variables locales
int i=0;
char ord[20];
//Obteniendo m xima resolución posible
xmax=getmaxx();
ymax=getmaxy();
//Creando ejes de coodernadas
line(20,0,20,ymax-20);//ejes de las x
line(20,ymax-20,xmax,ymax-20); //ejes de las y
for (i=1;i<=20;i++) //numerando ejes cartesianos
{
sprintf(ord,"%d",i*3);
outtextxy((i*30)+20,ymax-20,ord); //ejes x
outtextxy(5,ymax-(i*30)-20,ord); //ejes y
outtextxy(xmax-100,30,"Escala 1:10");
};
}
void ejes::cuadricula()
{
int i=0,j=0;
for (i=1;i<=34;i++)
{
line(20,(ymax-20)-(i*10),xmax,(ymax-20)-(i*10)); //filas
};
for (j=1;j<=65;j++)
{
line(20+(j*10),ymax-20,20+(j*10),120); //columnas
};
}
class parabola
{
public:void graftiro(float ang,float vel);
};
void parabola::graftiro(float ang, float vel) //ángulo y velocidad
{
//Inicializando variables para el cálculo
const g=9.8; //gravedad terrestre
double x=0,y=0,t=0,stop=1;
char ord[20];
for (t=1;stop!=0; t++)
{
//formulas para el movimiento vertical y horizontal
//en funcián del tiempo respectivamente
y=(vel*sin(ang*M_PI/180)*t/30)-(g*0.5*pow(t/30,2));
//g es la aceleración de la gravedad
x=(vel*cos(ang*M_PI/180)*t/30);
moveto(((x+20)),(ymax-20-y));
putpixel(getx(), gety(), getmaxcolor());
if (t<1000) //esto no puede durar mas de 10 segundos
{ //control de pausa por si la cosa se alarga
delay(10);
};
if (gety()>=ymax-20)
{
stop=0;
outtextxy(xmax-280,40,"Sumario");
sprintf(ord,"Tiempo %f segundos",t/30);
outtextxy(xmax-280,60,ord);
sprintf(ord,"Distancia %f metros",vel*cos(ang*M_PI/180)*t/30);
outtextxy(xmax-280,80,ord);
sprintf(ord,"Altura máxima %f metros",pow(vel*sin(ang*M_PI/180),2)/(2*g));
outtextxy(xmax-280,100,ord);
};
};
}
void main()
{
video objvideo; //instanciando objetos
ejes objejes;
parabola grafica;
objvideo.inicializar();
cout<<" Simulaci¢n de tiro parab¢lico"<<"\n";
cout<<" Desarrollado por Luis Alberto De Jesús"<<"\n";
cout<<" 19/11/07"<<"\n";
cout<<" Digite una opción para continuar";
char inf,inf1;
gotoxy(2,6);
cout<<"Cuadricular s/n ?"; //por si queremos cuadricular
inf1=getche();
double a,v;
inicio: //etiqueta de referencia
objejes.dibujar();
if ((inf1=='s')||(inf1=='S')) // si se eligio s cuadriculamos
{
objejes.cuadricula();
}
outtextxy(30,20,"Digite el ngulo de tiro: ");
gotoxy(30,2);cin>>a;
if ((a<0)||(a>90)) //control del angulo de tiro
{
cout.width(20);
cout<<"Entrada inv lida";
getche();
goto inicio; //si es menor que 0 o mayor de 90 ir a inicio
}
outtextxy(30,35,"Digite la velocidad de tiro en m/seg: ");
gotoxy(42,3);cin>>v;
grafica.graftiro(a,v);//grados y velocidad
outtextxy(30,50,"Desea terminar la simulación s/n? ");
gotoxy(40,4);
inf=getche();
if ((inf=='s')||(inf=='S')) //por si queremos repetir la simulación o terminar
{
goto fin;
}
else
{
goto inicio;
}
fin: //etiqueta de referencia
objvideo.finalizar(); //liberando la memoria
}
Veamos ahora el aspecto en pantalla

Presionamos s para ver la simulación en cuadrícula. Cualquier tecla por si no.

Digitamos un ángulo, por ejemplo 56

Pulsamos intro y digitamos una velocidad inicial, 65 por ejemplo y pulsamos intro.

Si digitamos s salimos del simulador y si presionamos cualquier tecla realizamos otra simulación.
Hasta otra próxima monografía.
Luís Alberto De Jesús
Santo Domingo República Dominicana.
23/11/2007
Página anterior | ![]() Volver al principio del trabajo | Página siguiente ![]() |
Trabajos relacionados
Ver mas trabajos de Programacion |
|
Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.