260813

const W = 800;
const H = 800;
const S = 650;
const GRID = 10;

let palette = [];
let boxSize;
let gridOrigin;

function setup() {
  createCanvas(W, H, WEBGL);
  palette = colorArray[1].colors;
  ortho();
  boxSize = (S / (GRID - 1)) * 1.25;
  gridOrigin = (S - (GRID - 1) * boxSize) / 2;
  setupPartitionFrame({
    size: S,
    gap: 50,
    minPieceCount: 3,
    maxPieceCount: 6,
    minPieceSize: 100,
    layerGap: boxSize / 2,
  });
}
function draw() {
  background(palette[4]);
  drawPartitionFrame(drawPieceContent);
}

function drawPieceContent(ctx, meta, frame) {
  let phase = frameCount * 0.005 * TAU;
  let amp = boxSize / 2;
  let center = amp * sin(0.5 * TAU + phase);
  let wave = [];
  for (let k = 0; k < GRID; k++) {
    wave[k] = amp * sin((k / (GRID - 1)) * TAU + phase) - center;
  }

  ctx.fillStyle = palette[3];
  ctx.fillRect(0, 0, frame.bufferW, frame.bufferH);
  ctx.strokeStyle = palette[4];
  ctx.lineWidth = 5;
  ctx.lineCap = "round";
  ctx.beginPath();

  for (let j = 0; j < GRID; j++) {
    for (let i = 0; i < GRID - 1; i++) {
      ctx.moveTo(
        gridOrigin + i * boxSize + wave[j] - meta.minX,
        gridOrigin + j * boxSize + wave[i] - meta.minY,
      );
      ctx.lineTo(
        gridOrigin + (i + 1) * boxSize + wave[j] - meta.minX,
        gridOrigin + j * boxSize + wave[i + 1] - meta.minY,
      );
    }
  }

  for (let i = 0; i < GRID; i++) {
    for (let j = 0; j < GRID - 1; j++) {
      ctx.moveTo(
        gridOrigin + i * boxSize + wave[j] - meta.minX,
        gridOrigin + j * boxSize + wave[i] - meta.minY,
      );
      ctx.lineTo(
        gridOrigin + i * boxSize + wave[j + 1] - meta.minX,
        gridOrigin + (j + 1) * boxSize + wave[i] - meta.minY,
      );
    }
  }

  ctx.stroke();
}

const colorArray = [
  {
    id: 0,
    colors: ["#253276", "#dfdad3", "#ffffff", "#000000"],
  },
  {
    id: 1,
    colors: [
      "#9dbdba",
      "#f8b042",
      "#e47763",
      "#253276",
      "#dfdad3",
      "#FFFFFF",
      "#000000",
    ],
  },
];
const W = 800;
const H = 800;
const S = 650;
const GRID = 10;

let palette = [];
let boxSize;
let gridOrigin;

function setup() {
  createCanvas(W, H, WEBGL);
  palette = colorArray[1].colors;
  ortho();
  boxSize = (S / (GRID - 1)) * 1.25;
  gridOrigin = (S - (GRID - 1) * boxSize) / 2;
  setupPartitionFrame({
    size: S,
    gap: 50,
    minPieceCount: 3,
    maxPieceCount: 6,
    minPieceSize: 100,
    layerGap: boxSize / 2,
  });
}
function draw() {
  background(palette[4]);
  drawPartitionFrame(drawPieceContent);
}

function drawPieceContent(ctx, meta, frame) {
  let phase = frameCount * 0.005 * TAU;
  let amp = boxSize / 2;
  let center = amp * sin(0.5 * TAU + phase);
  let wave = [];
  for (let k = 0; k < GRID; k++) {
    wave[k] = amp * sin((k / (GRID - 1)) * TAU + phase) - center;
  }

  ctx.fillStyle = palette[3];
  ctx.fillRect(0, 0, frame.bufferW, frame.bufferH);
  ctx.strokeStyle = palette[4];
  ctx.lineWidth = 5;
  ctx.lineCap = "round";
  ctx.beginPath();

  for (let j = 0; j < GRID; j++) {
    for (let i = 0; i < GRID - 1; i++) {
      ctx.moveTo(
        gridOrigin + i * boxSize + wave[j] - meta.minX,
        gridOrigin + j * boxSize + wave[i] - meta.minY,
      );
      ctx.lineTo(
        gridOrigin + (i + 1) * boxSize + wave[j] - meta.minX,
        gridOrigin + j * boxSize + wave[i + 1] - meta.minY,
      );
    }
  }

  for (let i = 0; i < GRID; i++) {
    for (let j = 0; j < GRID - 1; j++) {
      ctx.moveTo(
        gridOrigin + i * boxSize + wave[j] - meta.minX,
        gridOrigin + j * boxSize + wave[i] - meta.minY,
      );
      ctx.lineTo(
        gridOrigin + i * boxSize + wave[j + 1] - meta.minX,
        gridOrigin + (j + 1) * boxSize + wave[i] - meta.minY,
      );
    }
  }

  ctx.stroke();
}

const colorArray = [
  {
    id: 0,
    colors: ["#253276", "#dfdad3", "#ffffff", "#000000"],
  },
  {
    id: 1,
    colors: [
      "#9dbdba",
      "#f8b042",
      "#e47763",
      "#253276",
      "#dfdad3",
      "#FFFFFF",
      "#000000",
    ],
  },
];

Last Updated:

260813