Descargar

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