Archive for the ‘ Programación ’ Category

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

2
25
Apr

Dibujar curvas parametrizadas 3D en Flash

He escrito un código que permite hacerlo.

No es mas que un Archivo *.fla, con un código de AS de 44 lineas que simula profundidad y capaz de generar movimiento en los 3 ejes X,Y,Z. El código no es muy limpio, pero al menos funciona. No va ni incluido en una clase siquiera. ¿Que quieren?, no soy un pr0.

Anteriormente y había hablado un poco de él aquí.

El código dibuja correctamente cualquier curva que le pongas, únicamente cabe especificar la parametrización matemática de su movimiento. Está programado para curvas 3D, pero en su defecto pueden poner el eje Z o X siempre en valor nulo y podrán representar curvas 2D.

A continuación les pongo algunos ejemplos de parametrizaciones locas que se me han ocurrido de las que ni siquiera me acuerdo de parametrización que representan:

Hélice
Hélice
[Vertical]

Curva de Lissajous , infinito
Infinito
[Vertical, Inclinado]

Curva de Lissajous en el plano XY
Simbolo de bus light year?
[Normal]

Curva de Lissajous, “S”
Curva
[Vertical, Lateral, Inclinado]

Curva rara 1
Curva rara
[Normal]

Curva rara 2
Curva rara
[Normal]

Curva rara 3
Curva rara
[Normal]

Curva rara 4
Curva rara
[Normal]

Curva rara 5
Curva rara
[Normal]

Para los que se pregunten que es una parametrización de una curva en 3D, vendría a ser esto: r(t)=(t*tan(t/3),t*cos(t),t*sin(t)) , donde cada coma separa las cocordenadas: r(t)=(CoordX(t), CoordY(t), CoordZ(t))

Donde “t” sería el tiempo. Se supone que este avanza de forma lineal y uniforme, cambiando así valor de cada coordenada, dando un punto en el espacio; que es dibujado por el programa cada cierto tiempo.

Archivo fuente: Archivo FlashCurvas parametrizadas en 3D

3
23
Apr

Programa en C++ que devuelve las cifras de un número entero en orden inverso

Esto es un programa escrito en C++, programado en el shell. Lo que hace es bien sencillo, el usuario introduce un numero entero como por ejemplo “123456” y el programa re-ordena las cifras poniéndolas en el orden inverso; es decir, en el caso anterior, devolvería el valor de “654321“:

El código es el que sigue:

#include
using namespace std;

int inv(int n);
int pou(int b,int e);

//main
int main(void){
int n;
cin>>n;
cout<<"Numero invertido de orden:"< system("PAUSE");
}

//funcion auxiliar para elevar enteros.
int pou(int b,int e){
int i,r=1;
for(i=0;i r*=b;
}
return(r);
}
//funcio principal de reordenacion
int inv(int n){
int s=n,c=0,i,t=0,x;
while(s>0){
c++;
s/=10;
}
for(i=0;i x=n/(pou(10,i))%10;
t=t*10+x;
}
return(t);
}

Nota: Vas a necesitar de un compilador C++ para compilarlo.