Slider horizontal de imágenes

Este es un código de demostración de un slider horizontal de imágenes con el movimiento de scroll característico de estos dispostivos, el kinetic scrolling.

Slider s;
 
void setup() {
  orientation(PORTRAIT);
 
  // Imaginemos que tenemos 4 imágenes (por ejemplo)
  // llamadas imagen-0.jpg, imagen-1.jpg ...
  PImage[] imagenes = new PImage[4];
  for (int n = 0; n < 4; n++) {
    imagenes[n] = loadImage("imagen-"+n+".jpg");
  }
  s = new Slider(imagenes, 0);
}
 
void draw() {
  background(0);
  s.draw();
}
 
void mouseDragged() {
  if (mouseY == constrain(mouseY, s.y, s.y+s.imagenes[0].height)) {
    s.slide(mouseX-pmouseX);
  }
}

Donde la clase Slider es:

class Slider {
 
  PImage[] imagenes; 
 
  float x, y, xn;
  float vx;
 
  int pos, posDet;
 
  float VMAX = 80;
  float VMIN = 1;
  float BREAK_DISTANCE = 100;
 
  Slider(PImage[] imagenes_, float y_) {
    imagenes = imagenes_;
    y = y_;
 
    pos = 0;
    posDet = 0;
    x = 0;
    xn = x;
  }
 
  void update() {
    posDet = floor(x/width);
 
    int posn = pos;
    xn = pos*width;
 
    if (vx > 0) {
      posn = pos+1;
    }
    else if (vx < 0) {
      posn = pos-1;
    }
    posn = constrain(posn, 0, imagenes.length-1);
 
    if (posn < 0) posn = 0;
    else if (posn > imagenes.length-1) posn = imagenes.length-1;
 
    xn = posn*width;
 
    if (abs(x-xn) < 5) {
      x = xn;
      pos = posn; 
      vx = 0;
    }
    else if (abs(x-xn) < 2*VMAX + 1) {
      vx = Math.signum(vx)*min(abs(vx),abs(.15*(xn-x)));
      x += vx;
    }
    else {
      x += vx;
 
      float ax = 1.;
      if (abs(vx) > 5) ax = .9;
      if (abs(x-xn) < BREAK_DISTANCE*.9) {
        ax = min(1, 5.*abs(x-xn)/BREAK_DISTANCE);
      }
      vx *= ax;
      vx = Math.signum(vx) * max(VMIN, abs(vx));
    }
  }
 
 
 
  void draw() {
    update();
    pushMatrix();
    translate(-x, 0);
    for (int n = 0; n < imagenes.length; n++) {
      float x_ = n*width;
      float h_ = (float)imagenes[n].height/imagenes[n].width*width;
      image(imagenes[n], x_, y, width, h_);
    }
    popMatrix();
  }
 
  void slide(float v) {
    vx = -2*v;
    vx = Math.signum(vx) * min(VMAX, abs(vx));
  }
}