Plano Inclinado

Source Code

Demo desarrollada en Processing para practicar el posicionamiento de una partícula moviendose sobre un plano.

Para calcular este movimiento debemos descomponer las fuerzas que actuan sobre nuestra partícula.

$$ F_{normal} = mass · gravity · \cos( angle)$$ $$ F_{tangencial} = mass · gravity · \sin( angle)$$

Como la Fnormal se anula con la fuerza que ejerce el plano sobre nuestro objeto, solo aplicaremos Ftangencial. Por último calcularemos la fuerza de rozamiento definida de la siguiente forma:

$$ F_{rozamiento} = -kv $$

Siendo k la constante de rozamiento y v la velocidad de la partícula.

Para realizar este movimiento implementaremos la función calculateForce(), la cual nos devolverà la suma de las fuerzas aplicadas en la partícula para después poder integrarla.

void step(){
  F.set( calculateForce());
  acc.set( PVector.div( F, m));
  vel.add( PVector.mult( acc, dt));
  pos.add( vel);
}

PVector calculateForce(){
  PVector sumF = new PVector(0, 0);

  PVector mg = new PVector();
  mg.set( PVector.mult( Fg, m));

  if( pos.x > p1.x){
    
    // Descomposición de Fuerza
    float mgn = mg.mag() * cos( angle);
    float mgt = mg.mag() * sin( angle);

    PVector normal = n.normalize( null).mult( -1).mult( mgn);
    PVector tangencial = v.normalize( null).mult( -1).mult( mgt);

    // Fuerza del plano
    PVector R = new PVector();
    R.set( normal.copy().mult(-1));

    // Fuerza de Rozamiento
    PVector Fd = new PVector();
    // Fd.set( PVector.mult( vel, d));
    Fd.set( PVector.mult( vel, -1).mult( d));

    sumF.add( normal);
    sumF.add( tangencial);
    sumF.add( R);
    sumF.add( Fd);  

    return sumF;
  }
  else{
    sumF.add( mg);
    return sumF;
  }
}