En este ejercicio se ha compuesto una cuerda, la cual está compuesta por una serie de partículas unidas por muelles.

La fuerza del muelle aplicada sobre cada partícula se ha calculado siguiendo la siguiente expresión:

$$ F_{muelle} = -k (L_{actual} - L_{reposo}) $$

Siendo k la constante elastica del muelle y L la elongación del muelle.

También se ha aplicado una fuerza de amortiguación que se ha calculado de la siguiente forma:

$$ F_{amortiguación} = -c ( V_{partícula_{1}} - V_{partícula_{2}}) $$

Donde c es la constante de amortiguación y V es la velocidad de una partícula.

La implementación de la función sería la siguiente:

void update()
{
  if( this._enabled && !this._broken){
    float prevL = this._l;
    this._e = PVector.sub( _p1.getPos(), _p2.getPos());
    this._l = _e.mag();
    this._eN = _e.normalize( null);

    // Fs = -Ke*( l - l0)
    _F.add( PVector.mult( this._eN, -this._Ke * (_l - this._l0)));

    // Fd = -Kd·eN·v
    _F.add( PVector.sub( this._p1.getVel(), this._p2.getVel()).mult( -this._Kd));
    // _F.mult( Kd);

    applyForces();
  }
  _F.set( 0, 0, 0); // Se actualiza en checkBroken()
}

void applyForces()
{
  _p1.addExternalForce(_F.copy());
  _p2.addExternalForce(PVector.mult(_F, -1.0));
}

Una vez hemos realizado la simulación para 1 cuerda, podemos ampliar la implementación añadiendo más cuerdas, eliminando el dibujado de los nodos y cambiando el color y podemos obtener una simulación de pelos.