Posiciones especificas de cuadrados

Holaa, necesito ayuda para un trabajo de la facultad. Consiste en generar con el movimiento y velocidad del mouse, diferentes obras de arte abstractas, en mi caso seleccione unas que contienen diferentes cuadrados cada uno en una posicion especifica. La cuestion es que nose como al mover el mouse se vayan generando los cuadrados. A medida que el mouse sube su velocidad deberian aparecer los cuadrados con colores mas calidos y por el contrario los colores mas frios y cada uno en sus posiciones especificas (que es lo que mas complica). Paso el codigo en que ya eh avanzado. Ojala alguien me pueda ayudar gracias!!

class prototipo-----------------------------------------------------------------------------------------------

Direccion_Velocidad  miVelocidadYDireccion; //declaro objeto
ArrayList <Caminante> caminantes; //declaro objeto ArrayList

void settings() {
  size (600,600);
  //Inicializo el objeto
  miVelocidadYDireccion = new Direccion_Velocidad();
  
  caminantes = new ArrayList<Caminante>();
  
  for (int i=0; i<random(0,5); i++)
  caminantes.add(new Caminante());
}

void draw(){
  miVelocidadYDireccion.calcularTodo(mouseX,mouseY);
  
  noStroke();
  for (Caminante c:caminantes){
  c.dibujar();
  if(miVelocidadYDireccion.velocidad()>10)
   c.mover();
 }
 
}

class caminante----------------------------------------------------------------------------------------------------

class Caminante {

  //Atributos
  float x1,y1;
  float x2,y2;
  float dir;
  float vel;
  float t;


  //Constructor
  Caminante() {

    x1 = random(width);
    y1 = random(height);
    x2 = random(width);
    y2= random(height);
    vel =15;
    t = random(50,100);
    dir = random(width,height) ;
  }

//lo que se va a dibujar dependiendo la direccion y velocidad
  void dibujar() {

    fill(miVelocidadYDireccion.velocidad()); /*cuanto menos velocidad tiene el mouse, se dibujan cuadrados con colores oscuros
                                              cuanto mas velocidad tiene el mouse, se dibujan cuadrados con colores 
                                              mas claros*/
    rect(x1, y1, t, t);
 
  }
//accion de cuando moves el mousse
   void mover() {

    x1 = x2+random(0,600); //DISTRIBUCION Y MOVIMIENTO DE LOS CUADRADOS
    y1 = y2+random(0,600); //DISTRIBUCION Y MOVIMIENTO DE LOS CUADRADOS
  
  //espacio toroidal
   x1=(x1>width?x1-width:x1);
    x1=(x1<0?x1+width:x1);
    y1=(y1>height?y1-height:y1);
    y1=(y1<0?+height:y1);
    
  }
}

class Direccion_y_velocidad--------------------------------------------------------------------------------------

class Direccion_Velocidad {
  float posX;
  float posY;
  float PosPrevX;
  float PosPrevY;
  float miDireccionX;
  float miDireccionY;
  float miDireccionPolar;
  float vel;

  Direccion_Velocidad () {
    this.posX=50;
    this.posY=600;
    vel=50;
    miDireccionX=600;
    miDireccionY=600;
  }

  void calcularTodo (float mi_X, float mi_Y) {
    PosPrevX=posX;
    PosPrevY=posY;
    posX=mi_X;
    posY=mi_Y;

    miDireccionX = posX-PosPrevX;
    miDireccionY = posY-PosPrevY;
    miDireccionPolar = degrees(atan2( posY-PosPrevY, posX-PosPrevX ));

    vel = dist (posX, posY, PosPrevX, PosPrevY);
  }


//metodos que devuelven valores o algo

  float velocidad() {
    return vel;
  }

  float direccionX () {
    return miDireccionX;
  }

  float direccionY () {
    return miDireccionY;
  }


  float direccionPolar () {
    return miDireccionPolar;
  }
  
}