Sólido rígido |
Movimiento general de un sólido rígido Movimiento de una esfera en una plataforma giratoria Caja sobre un plano inclinado Comportamiento oscilatorio
Disco impulsado por fuerza constante Partícula en el borde de un aro que rueda Cuerpo que rueda sobre una superficie cóncava Curvas cicloidales La rueda cuadrada |
Ecuaciones del movimiento del aro | |||
En esta página, se analiza el movimiento de un disco que desliza sobre una superficie plana y horizontal y que a la vez gira alrededor de su eje.
Vamos a estudiar el papel de la fuerza de rozamiento entre la superficie del disco y el plano sobre el que desliza, se observa que:
Esta última propiedad parece sorprendente, pero vamos a demostrar que los movimientos de traslación y de rotación del disco no son independientes, sino que están fuertemente acoplados. Este ejemplo, aunque sencillo en su formulación no tiene una solución analítica. Para describir la posición y la velocidad del disco en función del tiempo hay que resolver, aplicando procedimientos numéricos, las ecuaciones del movimiento. Al final de esta página, se proporciona el código fuente en lenguaje Java de los procedimientos numéricos empleados.
Ecuaciones del movimiento del aroRecordaremos que
Comenzamos nuestro estudio con un aro de masa ma y de radio R, como etapa previa antes de abordar el disco. El centro del aro se mueve con velocidad v, y gira alrededor de un eje perpendicular al plano del aro y que pasa por el centro, con velocidad angular ω.
El vector velocidad de un punto P cuya posición angular es θ, vp=(v-ωRsenθ)i+(ωRcosθ)j La fuerza de rozamiento dF que actúa sobre un elemento de masa dm se opone al movimiento de dicho elemento, su dirección es la misma que la velocidad v, y de sentido contrario.
Si ma es la masa del aro, la masa dm del elemento de longitud R·dθ, es dm=ma·dθ/(2π) Resultantes de las fuerzas que actúan sobre el aro Las componentes del vector fuerza dF sobre dicho elemento son
Las componentes de la fuerza resultante sobre el aro son
Por simetría Fy=0, lo que se confirma resolviendo la segunda integral. Ecuación del movimiento del centro de masas del aro ma·(dv/dt)=Fx
Momento de las fuerzas sobre los elementos del aro, respecto de su centro.
El momento total de las fuerzas sobre los elementos del aro, respecto del centro es
Su dirección es la del eje de rotación (ejeZ), y su sentido es contrario al de la velocidad angular ωdel aro. Ecuación de la dinámica de rotación I(dω/dt)=M. Donde I=ma·R2 es el momento de inercia del aro.
Para calcular la posición x y la velocidad v del centro del aro, el ángulo girado φ, y velocidad angular ω de rotación en función del tiempo t, se ha de resolver, empleando procedimientos numéricos, un sistema de dos ecuaciones diferenciales de segundo orden.
Previamente, hemos de obtener los valores de las funciones f(v, ω) y g(v, ω) calculando numéricamente las dos integrales para cada valor de v y ω. Casos particulares
Ecuaciones del movimiento del discoSea un disco de masa md y de radio R. El centro del disco se mueve con velocidad v, y gira alrededor de un eje perpendicular al plano del disco y que pasa por el centro, con velocidad angular ω.
El vector velocidad de un punto P que dista r del centro y cuya posición angular es θ, es vp=(v-ωrsenθ)i+(ωrcosθ)j La fuerza de rozamiento dF que actúa sobre el elemento de masa dm se opone al movimiento de dicho elemento, su dirección es la misma que la velocidad v, y de sentido contrario.
Resultante de las fuerzas que actúan sobre el disco Las componentes del vector dF sobre dicho elemento son
Las componentes de la fuerza resultante sobre el disco son
Por simetría Fy=0. Ecuación del movimiento del centro de masas del disco md·(dv/dt)=Fx
Momento de las fuerzas sobre los elementos del disco, respecto de su centro.
El momento total de las fuerzas sobre los elementos del disco, respecto del centro es
Ecuación de la dinámica de rotación I(dω/dt)=M. Donde I=(1/2)md·R2 es el momento de inercia del disco.
Para calcular la posición x y la velocidad v del centro del disco, el ángulo girado φ, y velocidad angular ω de rotación en función del tiempo t, se ha de resolver, empleando procedimientos numéricos, un sistema de dos ecuaciones diferenciales de segundo orden.
Previamente, hemos de obtener los valores de las funciones f(v, ω) y g(v, ω) calculando numéricamente las dos integrales dobles para cada valor de v y ω. Casos particulares
Ejemplo
Aro
Disco
Aro
Disco
Aro
ActividadesSe introduce
Se pulsa el botón titulado Empieza Cuando la velocidad inicial v0 de traslación del c.m. y la velocidad inicial de rotación ω0, son distintas de cero, el programa interactivo realiza un cálculo numérico intensivo, que aunque ha sido verificado, no está libre de inexactitudes. En el caso del disco, las operaciones a realizar son más de cuatro veces las que se efectúan con el aro, por lo que la animación puede resultar deficiente en los ordenadores con menor capacidad de procesamiento. |
Voyenli K., Eriksen E. On the motion of an ice puck. Am. J. Phys. 53 (12) December 1985, pp. 1149-1153
public abstract class Simpson { int n; final double a=0.0; final double b=2*Math.PI; public Simpson(int n){ if(n%2==1) n++; //hace que el número de divisiones sea par this.n=n; } public double integral(){ double h=(b-a)/n; double suma=f(a)+f(b); for(int i=1; i<n; i+=2){ suma+=4*f(a+i*h); } for(int i=2; i<n; i+=2){ suma+=2*f(a+i*h); } return (suma*h/3); } abstract public double f(double x); } public class Aro_Vcm extends Simpson{ double v, w; public Aro_Vcm(int n, double v, double w){ super(n); this.v=v; this.w=w; } void setVelocidades(double v, double w){ this.v=v; this.w=w; } public double f(double ang){ //radio R=unidad double num=(v-w*Math.sin(ang)); double den=Math.sqrt(v*v+w*w-2*v*w*Math.sin(ang)); return (num/den); } } public class Aro_Vangular extends Simpson{ double v, w; public Aro_Vangular(int n, double v, double w){ super(n); this.v=v; this.w=w; } void setVelocidades(double v, double w){ this.v=v; this.w=w; } public double f(double ang){ //radio R=unidad double num=(w-v*Math.sin(ang)); double den=Math.sqrt(v*v+w*w-2*v*w*Math.sin(ang)); return (num/den); } } public class Aro extends RungeKutta2{ double mu; Aro_Vcm cm=null; Aro_Vangular angular=null; Aro(double mu, double v0, double w0, double h){ super(h); this.mu=mu; cm=new Aro_Vcm(90, v0, w0); angular=new Aro_Vangular(90, v0, w0); } public double f(double x, double y, double v, double w, double t){ cm.setVelocidades(v, w); double temp=-mu*9.8*cm.integral()/(2*Math.PI); return temp; } public double g(double x, double y, double v, double w, double t){ angular.setVelocidades(v, w); double temp=-mu*9.8*angular.integral()/(2*Math.PI); return temp; } } public abstract class SimpsonDoble { private int n; //número de divisiones del intervalo a, b (integral interior) private int m; //número de divisiones del intervalo c, d (integral exterior) final double x1=0.0; final double x2=1.0; final double y1=0.0; final double y2=2*Math.PI; public SimpsonDoble(int n1, int m1){ if(n1%2==1) n1++; //hace que el número de divisiones sea par if(m1%2==1) m1++; //hace que el número de divisiones sea par this.n=n1; this.m=m1; } protected double integralPrimera(double p){ double h=(x2-x1)/n; double suma=f(x1, p)+f(x2, p); for(int i=1; i<n; i+=2){ suma+=4*f(x1+i*h, p); } for(int i=2; i<n; i+=2){ suma+=2*f(x1+i*h, p); } return (suma*h/3); } public double integral(){ double h=(y2-y1)/m; double suma=g(y1)+g(y2); for(int i=1; i<m; i+=2){ suma+=4*g(y1+i*h); } for(int i=2; i<m; i+=2){ suma+=2*g(y1+i*h); } return (suma*h/3); } abstract public double f(double x, double y); abstract public double g(double x); } public class Disco_Vcm extends SimpsonDoble{ double v, w; public Disco_Vcm(int n, int m, double v, double w){ //d/a separación dividido radio super(n, m); this.v=v; this.w=w; } void setVelocidades(double v, double w){ this.v=v; this.w=w; } public double f(double r, double ang){ double num=r*(v-w*r*Math.sin(ang)); double den=Math.sqrt(v*v+w*r*w*r-2*v*w*r*Math.sin(ang)); return (num/den); } public double g(double ang){ return (integralPrimera(ang)); } } public class Disco_Vangular extends SimpsonDoble{ double v, w; public Disco_Vangular(int n, int m, double v, double w){ //d/a separación dividido radio super(n, m); this.v=v; this.w=w; } void setVelocidades(double v, double w){ this.v=v; this.w=w; } public double f(double r, double ang){ double num=r*r*(w*r-v*Math.sin(ang)); double den=Math.sqrt(v*v+w*r*w*r-2*v*w*r*Math.sin(ang)); return (num/den); } public double g(double ang){ return (integralPrimera(ang)); } } public abstract class RungeKutta2 { double h=0.01; RungeKutta2(double h){ this.h=h; } public void setPaso(double h){ this.h=h; } public void resolver(Estado e){ //variables auxiliares double k1, k2, k3, k4; double l1, l2, l3, l4; double q1, q2, q3, q4; double m1, m2, m3, m4; //condiciones iniciales double x=e.x; double y=e.y; double vx=e.v; double vy=e.w; double t=e.t; k1=h*vx; l1=h*f(x, y, vx, vy, t); q1=h*vy; m1=h*g(x, y, vx, vy, t); k2=h*(vx+l1/2); l2=h*f(x+k1/2, y+q1/2, vx+l1/2, vy+m1/2, t+h/2); q2=h*(vy+m1/2); m2=h*g(x+k1/2, y+q1/2, vx+l1/2, vy+m1/2, t+h/2); k3=h*(vx+l2/2); l3=h*f(x+k2/2, y+q2/2, vx+l2/2, vy+m2/2, t+h/2); q3=h*(vy+m2/2); m3=h*g(x+k2/2, y+q2/2, vx+l2/2, vy+m2/2, t+h/2); k4=h*(vx+l3); l4=h*f(x+k3, y+q3, vx+l3, vy+m3, t+h); q4=h*(vy+m3); m4=h*g(x+k3, y+q3, vx+l3, vy+m3, t+h); //nuevo estado del sistema x+=(k1+2*k2+2*k3+k4)/6; vx+=(l1+2*l2+2*l3+l4)/6; y+=(q1+2*q2+2*q3+q4)/6; vy+=(m1+2*m2+2*m3+m4)/6; //cambia el estado de la partícula e.x=x; e.y=y; e.v=vx; e.w=vy; e.t=t+h; } abstract public double f(double x, double y, double vx, double vy, double t); abstract public double g(double x, double y, double vx, double vy, double t); } public class Estado { double t; double x; double y; double v; double w; public Estado(double t, double x, double y, double v, double w) { this.t=t; this.x=x; this.y=y; this.v=v; this.w=w; } } //creación de objetos //v0 y w0 son las velocidades iniciales Estado estado=new Estado(0.0, 0.0, 0.0, v0, w0); RungeKutta2 objeto=new Disco(mu, v0, w0, dt); //polimorfismo if(bAro){ objeto=new Aro(mu, v0, w0, dt); } //calcula la posición y la velocidad del disco o del aro en función del tiempo objeto.resolver(estado); |