Física en flash: Movimiento pendular.

Posted on Thursday 10 May 2007

Como es sabido, se puede hacer una aproximación bastante certera a la ecuación de movimiento de un péndulo mediante funciones trigonométricas senos o cosenos en su rotación:

Actionscript:
  1. var ang:Number = Math.PI/2;//angulo de rotación
  2. var omega:Number = 10;
  3. var amplitud:Number = 4;
  4. this.onEnterFrame = function() {
  5.     pendulo._rotation = amplitud*Math.sin(ang);
  6.     ang += omega/10;
  7. };


Siendo péndulo un MC con anclaje superior centrado.
Sencillo:

    Necesita tener Flash Player 7 o superior y JavaScript Activado. =)

Aunque si deseamos hacer variable su amplitud de movimiento mediante un drag, podemos hacer esto:

Necesita tener Flash Player 7 o superior y JavaScript Activado. =)

Los objetos son los mismos, el código es este:

Actionscript:
  1. var angulo:Number = Math.PI/2;
  2. var omega:Number = 9.81;//la frequencia angular, en la realidad viene determinada por la gravedad.
  3. /*Notas:
  4. Gterrestre=9.81m/s^2
  5. Glunar=1.62m/s^2
  6. Gmarciana=3.71m/s^2
  7. */
  8. pendulo.onPress = function() {
  9.     delete (onEnterFrame);
  10.     onEnterFrame = function () {
  11.         prota = (180/Math.PI)*-Math.asin((_xmouse-pendulo._x)/pendulo.barra._height);
  12.         pendulo._rotation = prota;
  13.         amplitud = pendulo._rotation;
  14.     };
  15. };
  16. pendulo.onRelease = function() {
  17.     comp();
  18. };
  19. pendulo.onReleaseOutside = function() {
  20.     comp();
  21. };
  22. function comp() {
  23.     //amplitud=radiantes!
  24.     //rotation=grados!
  25.     delete (onEnterFrame);
  26.     this.onEnterFrame = function() {
  27.         pendulo._rotation = amplitud*Math.sin(angulo);
  28.         if (angulo>2*Math.PI) {
  29.             angulo -= 2*Math.PI;
  30.         }
  31.         angulo += omega/100;
  32.     };
  33. }

Si alargan la altura de la barra, el código se adaptará al cambio.
El archivo *fla original, lo encontrarán aquí.

A ver si alguien se anima y corrige los pequeños fallos ;)




48 Comments for 'Física en flash: Movimiento pendular.'

  1.  
    May 10, 2007 | 8:43 am
     

    Me mareo !!! Cuac!

  2.  
    May 10, 2007 | 1:06 pm
     

    Tok, tok, tok ¡¡¡Está ocupaoooo!!! XD XD

  3.  
    Sebastian
    May 11, 2007 | 4:48 pm
     

    Hola me gustaria que me ayudaran a saber como definir las tres cordenadas para aumentar o disminuir una imagen con un boton…

    Gracias :D

  4.  
    May 11, 2007 | 8:36 pm
     

    Para augmentar una imagen de tamaño en ambos ejes, es flash debes usar:
    _xscale
    _yscale

    Ambos operan en porcentajes. U_U

  5.  
    Sebastian
    May 11, 2007 | 9:09 pm
     

    Gracias por responder…

    yo lo habia hecho asi e igual funciono…
    creo que es lo mismo
    _root.todo.mapa._x = -950;
    _root.todo.mapa._y = -350;
    _root.todo.mapa._width=2000;
    _root.todo.mapa._height=2000;

    ahora bien no se como hacer para que no se vea de una si no que el aumento sea gradual lo intente asi:

    _root.todo.mapa._width= (_root.todo.mapa._width + 10)

  6.  
    May 11, 2007 | 9:11 pm
     

    puedes meterlo dentro de un evento onEnterFrame:


    _root.onEnterFrame=function(){
    if (_root.todo.mapa._width< Tamaño final){
    _root.todo.mapa._width= (_root.todo.mapa._width + 10)
    }else{
    delete(onEnterFrame);}
    }

  7.  
    Sebastian
    May 11, 2007 | 9:28 pm
     

    Gracias por todo pero por medio de un boton no funciona toca darle clic y clic hazta llegar al final

    _root.mc_carcelen.onRelease=function(){
    if (_root.todo.mapa._width

  8.  
    Sebastian
    May 11, 2007 | 9:34 pm
     

    on(release){
    _root.onEnterFrame = function(){
    if (_root.todo.mapa._xscale

  9.  
    May 11, 2007 | 9:52 pm
     

    por eso te dije, “onEnterFrame”; no en “onRelease” U_U

  10.  
    Sebastian
    May 11, 2007 | 10:23 pm
     

    este dialogo cada ves acepta menos lineas de texto?… bueno si funciona si pongo dentro de un “on(release)” el “onEnterFrame” pero moviendolo por las cordenas x y y no funciona se va de largo…

    Gracias

  11.  
    Sebastian
    May 11, 2007 | 10:24 pm
     

    es que yo tengo una lista de ciudades y al darle clic quiero que se vaya a la ciudad que escogio dentro del mapa…. y tambien quiero hacer un zoom in y un zoom out… gracias por tu ayuda… es de mucha utilidad

    Gracias :D

  12.  
    Sebastian
    May 11, 2007 | 10:30 pm
     

    pero me gustaria que mientras este presionado el boton vaya aumentando 10 pero no me funciona…. gracias por toda tu ayuda…

    Gracias :D

  13.  
    May 11, 2007 | 10:40 pm
     

    Mándame un mail

  14.  
    Sebastian
    May 11, 2007 | 11:00 pm
     

    espero que te haya llegado el mail….
    :D

  15.  
    May 14, 2007 | 3:45 pm
     

    OMG! lindo chat xD

  16.  
    May 15, 2007 | 4:38 pm
     

    Interesante… ya casi no me acuerdo de muchas de estás cosas

  17.  
    Osguitar
    May 16, 2007 | 5:55 pm
     

    en cuanto al pendulo …
    como hacer q pare naturalmente???
    he intentado agregarle friccion pero no he podido…por fa si tienes la respuesta …escribeme….;) gracias

  18.  
    May 16, 2007 | 8:15 pm
     

    Multiplica la función que define la rotación por una exponencial de t negativo. U_U
    E^(-b·t), donde b es el coeficiente de amortimiento.

  19.  
    May 17, 2007 | 2:28 pm
     

    no
    entendi
    no fue muy claro…………..=}

  20.  
    May 17, 2007 | 2:49 pm
     

    Échale un vistazo a esto:

    La función original, la que no se para es A*sin(w*t+o)
    Al amortiguarla, añadimos e^(-b*t):
    A*e^(-b*t)*sin(w*t+o)

    Nota: una exponencial negativa, es lo mismo que dividir por esa exponencial:

    e^(-b*t) = 1/e^(b*t)

    Con lo que cada vez se acercará mas al cero (sin llegar nunca a él) que hace que se vaya parando todo el movimiento al estar multiplicando.

  21.  
    June 13, 2007 | 6:22 pm
     

    Hola, ¿qué tal?

    Podrías ayudarme… necesito saber qué función puedo/debo usar para hacer que la rotación de un movieclip siga la dirección del mouse.

  22.  
    June 13, 2007 | 7:44 pm
     

    Usa esto:

    mc._rotation=(180/Math.PI)*Math.atan(*_ymouse/_xmouse);

    SuerT

  23.  
    camila
    July 22, 2007 | 4:53 am
     

    holaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

  24.  
    AlE
    September 1, 2007 | 8:47 pm
     

    como puedo construir un pendulo!?????

  25.  
    September 2, 2007 | 3:16 pm
     

    AlE, te refieres a dibujarlo o a programarlo?

  26.  
    September 6, 2007 | 8:32 am
     

    [...] que yo era un genio de flash (no lo duden ni por un momento XD) Me dijo que si sabia como hacer un péndulo en flash. Le pasé ese mismo link, pero él quería un péndulo que oscilara [...]

  27.  
    Tala
    September 11, 2007 | 12:34 pm
     

    Buenas tarde… Bleend

    Sabes que subistes el archivo del pendulo que explicas aqui pero ma da error al querer descargarlo sera posible que lo montes nuevamente para poder chequearlo..????

    Muchisimas Gracias…

  28.  
    September 11, 2007 | 1:01 pm
     

    Tala, ya lo tienes. Es que puse dos veces la parte de “http://:P

  29.  
    Tala
    September 11, 2007 | 1:24 pm
     

    Que rapido jejejej muchisimas Gracias… Sabes full Actionscript no?? yo siempre quiero hacer cosas locas pero como no domino mucho el Actionscript :(

  30.  
    Tala
    September 11, 2007 | 1:28 pm
     

    Gracias.. :)

  31.  
    September 11, 2007 | 1:33 pm
     

    Jaja, no, no se “Full AS”, se mates y algunas cosillas de AS :P

  32.  
    Tala
    September 11, 2007 | 1:39 pm
     

    ups… el cache de mi maquina se quedo pegada y se repitio todo eso… jajajajaj disculpen…

  33.  
    Tala
    September 11, 2007 | 1:43 pm
     

    uhmmm… Pero lo haces bien dejame decirte jejeje… aceptas que te fastidie… ??? de ves en cuando y de cuando en ves…. jajajajajaja

  34.  
    September 11, 2007 | 1:49 pm
     

    Ya borré el post duplicado ;)

  35.  
    Tala
    September 11, 2007 | 2:00 pm
     

    Eres bueno… Y como que no se te puede fastidiar mucho jejeje por que no dijistes nadita…

  36.  
    September 11, 2007 | 2:15 pm
     

    No, no, es que ando algo ocupado, mañana empiezo clases, y estoy imprimiendo horarios y organizando agendas… Mándame un email, si tienes alguna duda, ya te contestaré ;)

  37.  
    caro
    September 17, 2007 | 6:39 pm
     

    cual es el significado del pendulo?

  38.  
    caro
    September 17, 2007 | 6:40 pm
     

    perdon del moviemiento pendular?

  39.  
    September 18, 2007 | 2:28 am
     

    Un péndulo, es quizás la representación mas sencilla de un Movimiento Armónico Simple (MAS)( Siempre que se considere que sin (a) ~ a)

  40.  
    Tala
    September 28, 2007 | 10:54 am
     

    Ah!!! disculpen jejeje buenas tardes como estan todos por aqui..??? que tal Bleend? como van esas clases?

  41.  
    September 28, 2007 | 11:02 am
     

    Vamos tirando… mecánica es difícil U_U

  42.  
    Tala
    September 28, 2007 | 1:43 pm
     

    Jejejeje…. Bueno ya veras que cuando le agarres la caida sera mucho mas facil

  43.  
    alerjandra
    October 3, 2007 | 3:57 pm
     

    hola como estan todos

  44.  
    October 5, 2007 | 3:45 am
     

    Muchísimas gracias por el código, me ha sido muy útil.

    Espero que no te importe. He tocado un poco tu código.

    Le he puesto un poco de rozamiento para que se vaya parando poco a poco y lo he pasado a una clase de programación. También ahora no hay que pulsar al ratón, con simplemente posicionarte sobre el péndulo basta.

    He dejado todo el código y el ejemplo aquí

  45.  
    October 5, 2007 | 3:51 am
     

    [...] nuevo ejemplo de qué se puede hacer con flash y las matemáticas. ¿Por qué no me dieron una asignatura así? Teníamos una cosa parecida y era horrible por la [...]

  46.  
    October 5, 2007 | 4:00 am
     

    Me parece fantástico, para eso está. ;)
    Igual debería mejorarlo un poco, ese drag no es muy correcto…

  47.  
    maca
    January 6, 2008 | 7:44 am
     

    hola. soy nueva, y recien me inicio en el flash, logro hacer el pendulo sencillo (no se si correcto pero valla que se mueve bien xDD) alguien me podria explicar que se hace con estos codigos y para un pendulo como se hace “variable su amplitud de movimiento mediante un drag”…

    gracias

  48.  
    January 6, 2008 | 1:31 pm
     

    @maca: Pues esa frase significa que el péndulo “se abrirá” mas, que “irá mas lejos” en su movimiento si lo arrastramos mas lejos.

    Los códigos los escribimos nosotros, este código, determina una serie de comportamientos de ese “Movie clip”, y le da un movimiento como de un péndulo.

    Una propiedad de los péndulos, es que aunque tengan una amplitud mayos, la frecuencia de oscilación se mantiene. ;)

Leave a comment

(required)

(required)


Information for comment users
Line and paragraph breaks are implemented automatically. Your e-mail address is never displayed. Please consider what you're posting.

Use the buttons below to customise your comment.


:smile: :grin: :razz: :lol: :wink: :mrgreen: :neutral: :roll: :shock: :???: :cool: :oops: :twisted: :evil: :eek: :mad: :sad: :cry: :!: :idea: :arrow:

RSS feed for comments on this post | TrackBack URI