jueves, febrero 09, 2006

Caida libre

Anduve programando un poco en C (si, un lenguaje como la gente mas allá de lo que algunos digan, herejes, ya conocerán toda su potencia) y me hice un programa para calcular la posición, velocidad y aceleración en una caída libre considerando la resistencia del aire, así que aquí se los dejo.

Esta el fuente (en C, lo mejor comentado que pude) y dos versiones del programa, una para una dependencia lineal de la velocidad y el otro para una dependencia cuadrática. En uno o dos días me tomo el trabajo y subo el despeje de las ecuaciones.

programa.rar

Saludos

1 comentario:

Diego dijo...

Fran, ya se que esto lo escribiste hace muchisimo, pero me tome el atrevimiento de hacerte una correccion.

No se si te fijaste que las funciones para calcular la aceleracion retornan numeros enteros. Eso es porque, al no declararle el tipo de retorno, por defecto es int. Por ejemplo, el prototipo del main vos lo pondrias asi:
main();
cuando en realidad hace:
int main(void);

Bueno, es por eso, y otras cosillas, que te lo modifique un poco, aca lo tenes.

#include <stdio.h>

#define G       9.81      /* gravedad */
#define VLIM  60.0      /* velocidad limite */
#define DT     0.5      /* delta tiempo */
#define RI      0.0      /* posicion inicial */
#define VI      0.0      /* velocidad inicial */
#define TI      0.0      /* tiempo inicial */
#define TF     20.0      /* tiempo final */

#define LINEAL            1
#define CUADRADO      2

float acel(float v, int tipo) {
      int i;
      float tmp=1;

      for(i=0; i < tipo; i++)
            tmp *= v/VLIM;

      return G*(1-tmp);
}     

int main(void) {
      float r=RI, v=VI, a=G, t;

      for (t = TI; t <= TF; t += DT) {
            r = r + v*DT + a/2*DT*DT;
            v = v + a*DT;
            a = acel(v,CUADRADO);

            printf("%4.2f\t%4.2f\t%4.2f\t%4.2f\n", t, r, v, a);
      }
      return 0;
}


Saludos