Posts Tagged ‘ Física ’

10
6
Sep

Física en flash: El péndulo tridimensional

Hace unos días Jacri me contactó. Se ve que alguien le dijo 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 tridimensionalmente.

Enseguida me imagine la forma de hacerlo, es sencillo: Si observamos un péndulo oscilar desde arriba, vemos que describe una circunferencia. Lo único que hay que añadir un alinea desde la bola del péndulo hasta un punto mas elevado (por donde se sujetaría).

La circunferencia, la hice haciendo su parametrización matemática:

r(t)=(cos t, sin t, 0) t€[o,2pi]

La linea, la conseguimos con un lineTo(a,b). Sencillo ^^
Claro que la teoría siempre es fácil, la cosa es poder hacerlo en la práctica. Yo creo yo que lo logré, igual algo justito y sucio, pero con un aprobado ya entramos, ¿no? XD
Bueno, la cosa es que se lo hice a Jacri, y quedó satisfecho ( me pagó 200$* U_u)

Hoy le he cambiado un par de cosillas, como por ejemplo, que se puede variar la inclinación en la que se ve, es decir, mirándolo desde el frente(1), o un poco mas arriba(2):

1:http://blog.bleend.net/downloads/jacri/Pi_2.swf 2:http://blog.bleend.net/downloads/jacri/Pi_4.swf

El código esta basado enteramente en el “entorno” 3D que hice (pero que no publiqué, porque, como ya pueden ver, no es muy limpio…) :
[as]//—variables—//
var ang_vision:Number = Math.PI/4
var guia:Boolean = true;
var cola:Number = 50;
var anchura:Number = 40
//—no variables—//
var Xo:Number = mc._x;
var Yo:Number = mc._y;
var i:Number = 0;
var altura:Number = 200*Math.sin(ang_vision);
var x3d:Number = 0;
var y3d:Number = 0;
var z3d:Number = 0;
var t:Number = 0;//angulo
var v:Number = 6;//velocidad de variación del angulo
//——alzamos a la máxima “profundidad” el péndulo—-//
mc.swapDepths(this.getNextHighestDepth());
//——–empezamos——//
_root.onEnterFrame = function() {
with (_root) {
//<-----------Introduce tu parametrización aquí:
x3d = (anchura)*Math.cos(t);
y3d = (anchura)*Math.sin(t);
z3d = 0
//<-----------Fin de parámetros
t += v/120;
}
//---------efecto 3D----------//
with (mc) {
_x = Xo+y3d-x3d*Math.sin(ang_vision);
_y = Yo-z3d+x3d*Math.cos(ang_vision);
}
setProf(mc,x3d/3);
//------------linea de recorrido----------//
if (guia) {
attachMovie("punto","p"+i,i+1);
ref = _root["p"+i];
if (i>1) {
ref._x = mc._x;
ref._y = mc._y;
ref._alpha = x3d+80;
}
}
_root["p"+(i-cola)].removeMovieClip();
i++;
//————linea al centro——–//
_root.createEmptyMovieClip(“linea”,10);
linea.lineStyle(2,0×999999,100);
linea.moveTo(Xo,Yo-altura);
linea.lineTo(mc._x,mc._y);
};
//gracias maikel:
function setProf(mc:MovieClip, prof:Number) {
with (mc) {
_width = prof+36;
_height = prof+36;
_alpha = prof+70;
}
}
[/as]

Como podrán notar, no hace falta mas que eso para reproducir cualquier parametrización matemática, cambiando el periodo de oscilación de un eje ( (anchura)*Math.sin(3*t);) , podrán reproducir cualquier figura de lissajous.

Edición: Se me olvidó! :P Pueden descargar aquí el archivo original


*(Nota: eso de los 200$ no es verdad, es solamente un engaño para evitar que nadie me pida que le haga su trabajo gratis U_U)
7
3
May

Física en Flash: Movimiento parabólico

Hace tiempo hablé con el gato de hacer un proyecto de juego en flash al estilo “Bowman”. Nada mas empezar desechamos la idea.

Pero para entonces había hecho esta “cosa” (la verdad es bastante mediocre, pero se entiende la idea):

El archivo *.fla original, lo encontrarán aquí.
Read the rest of this entry »

4
1
May

Física en Flash: Mov. Armónico Inframortiguado

Un movimiento oscilatorio simple, es el que realiza un muelle ideal en que no hay perdidas de energía mecánica. Son muy bonitos, pero en esta vida nada es “ideal”, en la realidad, los movimientos oscilatorios, con el tiempo, van perdiendo su fuerza, y su movimiento se reduce hasta detenerse.

Pues esto, si sabemos la formula física que lo representa, no puede ser más sencillo de implementar en Flash (teniendo unos mínimos conocimientos de AS, claro)

Siguiendo la ecuación, es sencillo:
Ecuación de un movimiento Armónico Simple inframortido

No amortiguado Amortiguado
http://blog.bleend.net/downloads/MHS.swf http://blog.bleend.net/downloads/MHSinframortido.swf

Se pueden definir parámetros tales como:

  1. Frecuencia angular.
  2. Amplitud (En este caso se define por el drag).
  3. Angulo de fase inicial
  4. Coeficiente de amortiguamiento.(Beta, en este caso 0,2)
  5. Y el propio paso del tiempo.

Este es el código, siendo p la instancia del Movie Clip al que aplicamos el movimiento:

[as]A = 0;
w = 1;
O = 0;
t = 0;
Xo = 48;
Yo = 200;
b = 0.2; //coeficiente de amortiguamiento
p.onPress = function() {
delete (onEnterFrame);
t = 0;
this.startDrag(true, Xo, -1000, Xo, 1000);
};
p.onRelease = function() {
compartida();
};
p.onReleaseOutside = function() {
compartida();
};
function compartida() {
this.stopDrag();
A = p._y-Yo;
_root.onEnterFrame = function() {
p._y = A*Math.pow(Math.E, -b*t)*Math.cos(w*t+O)+Yo;
t += 0.1;
};
}
[/as]

El archivo original, *.fla, lo podrán encontrarán Archivo Flashaquí.

Post Relacionado: Física en flash: Movimiento pendular