Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links
Cuando un cuerpo se mueve a velocidad relativamente baja a través de un fluido tal como un gas o un liquido, la fuerza de fricción puede puede obtenerse aproximadamente suponiendo que es proporcional a la velocidad, y opuesta a ella. Por consiguiente escribimos
El coeficiente de fricción K depende de la forma del cuerpo. Por ejemplo, en el caso de una esfera de radio R, un cálculo laborioso indica que
relación conocida como la ley de Stokes. El coeficiente c
depende de la fricción interna del fluido. Esta fricción interna
se denomina también viscosidad y recibe el nombre de coeficiente
de viscosidad.
El coeficiente de viscosidad de los liquidos disminuye a medida que aumenta
la temperatura , mientras que en el caso de los gases , el coeficiente aumenta
con el aumento de temperatura.
Cuando un cuerpo se cae a traves de un fluido viscoso bajo la acción de la la gravedad g, actuan sobre el las siguientes fuerzas
Si tomamos la direccion desde O hacia abajo como positiva, donde x es la distancia recorrida en funcion del tuempo, la ecuacion que describe su movimiento es
la que se puede escribir tambien como
donde m es la masa del cuerpo, como en esta ecuación tengo en cuenta el empuje ejercido por el fluido, de conformidad con el principio de Arquímides, es igual al peso del fluido desplazado por el cuerpo. Si mf es la masa del fluido desplazado, su peso es mf.g. Como el cuerpo es esferico de radio R, la masa del cuerpo m y la masa mf del fluido desplazado la podemos calcular con las siguientes formulas, d y df son respectivamente la densidad del cuerpo y del fluido
Para cuerpos grandes y velocidades mayores, la fuerza de fricción es proporcional a una potencia mayor de velocidad, esto lo trato en .
Consideremos una pelota de plástico esferica que se deja caer desde una determinada altura, con una velocidad inicial v=0 m/s es decir parte de reposo. Supongamos que su masa es de m=78.3 g y su radio de R=15 cm. La densidad del aire es df=1.293 kg/m3 y su viscosidad es c=17.1 10-6 kg/m·s.
La siguiente grafica muestra tanto la solucion numerica en color verde, que tiene en cuenta la resistencia del fluido al movimiento, como asi tambien el empuje, en color azul esta la grafica de la trayectoria pero en el vacio, el intervalo calculado es de un segundo, como se puede ver en ausencia del aire la esfera cae mas rapido.
#include <GL/glut.h> #include <stdlib.h> #include <stdio.h> #include <math.h> #define MAXPUNTOS 100 #define PI 3.1415926 #define g 9.81 #define coef_viscosidad 17.6e-6 double t[MAXPUNTOS+1], u1[MAXPUNTOS+1], u2[MAXPUNTOS+1]; double masa_fluido, masa_cuerpo, coef_friccion; void init_parametros(void) { double radio_cuerpo; double densidad_fluido; double densidad_cuerpo; radio_cuerpo=0.15; densidad_fluido=1.293; densidad_cuerpo=5.536; masa_fluido=(4.0/3.0)*PI*pow(radio_cuerpo, 3.0)*densidad_fluido; masa_cuerpo=(4.0/3.0)*PI*pow(radio_cuerpo, 3.0)*densidad_cuerpo; coef_friccion=6.0*PI*radio_cuerpo; } double f1(double t, double u1, double u2) { return (u2); } double f2(double t, double u1, double u2) { return (g*(1.0-(masa_fluido/masa_cuerpo))-coef_friccion*coef_viscosidad*u2); } double trayectoria_vacio(double t) { return ((1.0/2.0)*g*pow(t, 2.0)); } void RK4(double tinicial, double tfinal, double u1_inicial, double u2_inicial, int n) { double k1, k2, k3, k4; double l1, l2, l3, l4; double h; int i; h=(tfinal-tinicial)/n; t[0]=tinicial; u1[0]=u1_inicial; u2[0]=u2_inicial; for (i=0; i<n; i++) { k1=h*f1(t[i], u1[i], u2[i]); l1=h*f2(t[i], u1[i], u2[i]); k2=h*f1(t[i]+h/2.0, u1[i]+k1/2.0, u2[i]+l1/2.0); l2=h*f2(t[i]+h/2.0, u1[i]+k1/2.0, u2[i]+l1/2.0); k3=h*f1(t[i]+h/2.0, u1[i]+k2/2.0, u2[i]+l2/2.0); l3=h*f2(t[i]+h/2.0, u1[i]+k2/2.0, u2[i]+l2/2.0); k4=h*f1(t[i]+h, u1[i]+k3, u2[i]+l3); l4=h*f2(t[i]+h, u1[i]+k3, u2[i]+l3); u1[i+1]=u1[i]+(1.0/6.0)*(k1 + 2.0*k2 + 2.0*k3+ k4); u2[i+1]=u2[i]+(1.0/6.0)*(l1 + 2.0*l2 + 2.0*l3+ l4); t[i+1]=t[i] + h; } } void init(void) { glClearColor(0, 0, 0, 0); glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glHint(GL_LINE_SMOOTH, GL_NICEST); init_parametros(); RK4(0.0, 1.0, 0.0, 0.0, MAXPUNTOS); } void display(void) { int i; glClear(GL_COLOR_BUFFER_BIT); glMatrixMode( GL_MODELVIEW_MATRIX ); glLoadIdentity(); //ejes glColor3f(0.0, 0.5, 0.8); glBegin(GL_LINES); glVertex2f(0.0, 0.0); glVertex2f(1.0, 0.0); glVertex2f(0.0, 0.0); glVertex2f(0.0, 5.0); glEnd(); //grafica de la solucion numerica en verde glColor3f(0.0, 1.0, 0.0); glBegin(GL_LINE_STRIP); for (i=0; i<MAXPUNTOS; i++) glVertex2f(t[i], u1[i]); glEnd(); //grafica de la trayectoria en el vacio en rojo glColor3f(1.0, 0.0, 0.0); glBegin(GL_LINE_STRIP); for (i=0; i<MAXPUNTOS; i++) glVertex2f(t[i], trayectoria_vacio(t[i])); glEnd(); glFlush (); } void reshape (int w, int h) { if (!h) return; glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-0.2, 1.2, -0.2, 5.2); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (350, 350); glutInitWindowPosition (0, 0); glutCreateWindow ("Friccion en un Fluido"); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } |
valcoey@hotmail.com
Ramiro Alcocer, 2001
Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links