Página anterior Volver al principio del trabajoPágina siguiente 

Simulación de sistemas (página 2)

Enviado por dataunix

Partes: 1, 2


//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


 

 

Autor:

dataunix[arroba]hotmail.com

Programa que simula el lanzamiento de un proyectil dado su  ángulo

y velocidad inicial tomando como base las fórmulas referentes al tiro parabólico

*/

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <iostream.h>

#include <dos.h>

#include <string.h>

double xmax=0, ymax=0;

//variables globales, obtienen resolución máxima

class video

{

public: void inicializar();

public: void finalizar();

};

void video::inicializar()

{

//solicitando autodetección del driver de gráficos

int gdriver = DETECT, gmode, errorcode;

//Inicializando driver de gr ficos y variables locales

initgraph(&gdriver, &gmode, "c:\\tc\\bgi");

//no olvidar especificar ruta de las librerias de gráficos

//verificando errores

errorcode = graphresult();

if (errorcode != grOk) //ocurri¢ un error?

{

grapherrormsg(errorcode);

cout<<"Error de video: "<<errorcode;

cout<<"Presionar cualquier tecla: ";

getch();

exit(1); //Termina si hay un error

};

}

void video::finalizar()

{

closegraph(); //proceso de limpieza

}

class ejes

{

public: void dibujar();

public: void cuadricula();

};

void ejes::dibujar()

{

cleardevice();//limpia la pantalla

setcolor(EGA_YELLOW);

setbkcolor(EGA_BLUE);


Partes: 1, 2


 Página anterior Volver al principio del trabajoPágina siguiente 

Comentarios


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.


Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.