[programitas] Re: duda!!!!

  • From: "Jaime Villarreal" <jaime@xxxxxxxxxxxxx>
  • To: programitas@xxxxxxxxxxxxx
  • Date: Fri, 7 Aug 2009 13:24:05 -0500 (CDT)

Puedes agregar un poco de física newtoniana para crear el efecto que buscas.
Por ejemplo puedes crear un variable de fricción

     float fricc = 0.99;

Esto puedes aplicar al valor de velocidad de cada pelota antes de
desplazar su posición por velocidad. El nuevo valor de velocidad es es el
producto de su mismo valor multiplicado por el fricción.

     vely[j] *= fricc;
     posy[j] = posy[j] + vely[j];

Si quieres que las pelotas caen en el suelo también puedes agregar un
variable de aceleración y una fuerza de gravedad.

     float acc = 0;
     float fuerza = .98;

Por cada pelota sumas la fuerza a la aceleración y sumas la aceleración a
la velocidad. Al final multiplicas la aceleración a zero para reiniciarlo.

     acc += fuerza;
     vely[j] += acc;
     vely[j] *= fricc;
     posy[j] = posy[j] + vely[j];
     acc *= 0;

una ultima cosa que debes hacer para asegurar que las pelotas
eventualmente descansen en el suelo es restringir su posición al los
limites que deseas. En este caso puedes aplicar la restricción al momento
de aplicar el rebote de las pelotas en el suelo utilizando el comando
"constrain".

    if( posy[j] > height-radio/2 || posy[j] < 0){
      posy[j] = constrain(posy[j],0,height-radio/2);
      vely[j] = vely[j]*-1;
    }


>
> bueno, el sig codigo es de un conjunto de pelotitas que caen y botan, pero
> no encuentro el modo de hacer que paren gradualmente, alguna sugerencia?,
> please. aunque tampoco si el codigo sea el optimo para este ejercicio,
> gracias
>
>
> //variables
> int xini = 200; //posicion inicial en X
> int yini = 0;   //posicion inicial en Y
> int radio = 30; //radio de los circulitos
>
> //declaracion de los arrays
> float [] posx;
> float [] posy;
> float [] vely;
>
> void setup(){size (600,600);
>
>      posx = new float [10];
>      posy = new float [10];
>      vely = new float [10];
>
> // creacion de los arrays de velocidad, posicion en Y y posicion en X
>
> vely[0]=3;        posy[0]=yini;          posx[0]=xini;
> vely[1]=2;        posy[1]=yini;          posx[1]=xini+radio;
> vely[2]=1;        posy[2]=yini+radio;    posx[2]=xini;
> vely[3]=3.5;      posy[3]=yini+radio;    posx[3]=xini+radio;
> vely[4]=2.5;      posy[4]=yini+20;       posx[4]=xini+radio;
> vely[5]=1.5;      posy[5]=yini+3*radio;  posx[5]=xini;
> vely[6]=4;        posy[6]=yini+3*radio;  posx[6]=xini+radio;
> vely[7]=5;        posy[7]=yini+3*radio;  posx[7]=xini+2*radio;
> vely[8]=5.5;      posy[8]=yini+4*radio;  posx[8]=xini;
> vely[9]=.5;       posy[9]=yini+3*radio;  posx[9]=xini+radio;
>    }
>
>
> void draw(){
>   background(255);
>   noStroke();
>   smooth();
>   fill(0);
>   //dibuja 10 circulos en el frame
>   for ( int i = 0; i< 10; i++){
>       ellipse(posx[i],posy[i],radio,radio);}
>
>   // controla la posicion y la velocidad de los circulos
>   for( int j=0; j < posy.length; j++){
>       posy[j] = posy[j] + vely[j];
>       if( posy[j] > height-radio/2 || posy[j] < 0){
>         vely[j] = vely[j]*-1;}
>        }
>    }
>
>
>
> _________________________________________________________________
> Feliz aniversario Messenger!
> www.aniversariomessenger.com.mx



Other related posts: