7. Componer más de una forma

Paso 7/8 de práctica 1 "Lienzo interactivo"

Hasta ahora tenemos una forma que reacciona al ratón. Vamos a añadir formas secundarias para crear una composición. Aquí es donde entra en juego tu decisión estética personal.

Algunas ideas para formas secundarias:

  • Una forma que sigue al ratón pero con la mitad de tamaño

  • Una forma en la posición simétrica al ratón (width - mouseX, height - mouseY)

  • Una forma fija en el centro que cambia solo de color

  • Varias formas pequeñas repartidas por el lienzo con colores derivados del tono principal

Es el momento de tomar tus propias decisiones. A continuación te mostramos dos propuestas completas distintas para que veas cómo la misma estructura puede producir resultados muy diferentes. No copies ninguna: úsalas como inspiración para crear la tuya.

Propuesta A - colores complementarios

Usa el modo HSB para crear tres círculos con colores separados 120 grados en el arco iris. El ratón controla el tono principal y el tamaño general:

function setup() {
  createCanvas(600, 400);
  colorMode(HSB, 360, 100, 100);
}

function draw() {
  background(240, 20, 10); // fondo casi negro azulado

  let tono   = map(mouseX, 0, width,  0, 360);
  let tamaño = map(mouseY, 0, height, 30, 180);

  noStroke();

  // Luna central: color principal
  fill(tono, 80, 90);
  ellipse(width / 2, height / 2, tamaño, tamaño);

  // Luna izquierda: 120 grados de diferencia
  fill((tono + 120) % 360, 70, 80);
  ellipse(width / 2 - 160, height / 2, tamaño * 0.6, tamaño * 0.6);

  // Luna derecha: 240 grados de diferencia
  fill((tono + 240) % 360, 70, 80);
  ellipse(width / 2 + 160, height / 2, tamaño * 0.6, tamaño * 0.6);

  // Reflejo: simetría vertical del ratón
  fill(tono, 50, 60, 0.4);
  ellipse(mouseX, mouseY, tamaño * 0.3, tamaño * 0.3);
}

Nota

El operador % 360 hace que el tono vuelva a 0 si supera 360, recorriendo el arco iris de forma cíclica sin salirse del rango.

Propuesta B - Cuadrados con rastro

Usa el modo RGB con un fondo semitransparente que crea un efecto de rastro:

function setup() {
  createCanvas(600, 400);
  // Modo RGB por defecto, no hace falta colorMode()
}

function draw() {
  // background con transparencia: crea un rastro que se desvanece
  background(15, 15, 30, 40);

  let rojo   = map(mouseX, 0, width,  50, 255);
  let verde  = map(mouseY, 0, height, 50, 200);
  let tamaño = map(mouseX, 0, width,  20, 120);

  noFill();
  strokeWeight(2); // grosor de 2 píxeles para el borde

  // Cuadrado principal en la posición del ratón
  stroke(rojo, verde, 100);
  rect(mouseX - tamaño / 2, mouseY - tamaño / 2, tamaño, tamaño);

  // Cuadrado secundario, posición simétrica
  stroke(255 - rojo, 255 - verde, 200);
  let tam2 = tamaño * 0.6;
  rect(width - mouseX - tam2 / 2, height - mouseY - tam2 / 2, tam2, tam2);

  // Cuadrado central fijo
  stroke(rojo, 150, verde);
  rect(width / 2 - 30, height / 2 - 30, 60, 60);
}

Nota

background(15, 15, 30, 40) usa un cuarto valor (alfa = transparencia). En lugar de borrar el lienzo completamente, lo oscurece ligeramente, creando un rastro de las posiciones anteriores del ratón. Prueba a cambiar este valor para comparar los resultados.