tex = loadImage("IMG_3392.JPG");
colorMode(HSB, 360, 100, 100, 100);
while (palette.length < 5) {
palette = shuffle(chromotome.get().colors);
background(0, 0, 95, 33);
let cell_num = int(random(1, 4));
drawingContext.shadowColor = color(0, 0, 0, 33);
let w = sqrt(sq(width) + sq(height));
translate(width / 2, height / 2);
translate(-w / 2, -w / 2);
function setGrid(x, y, w, h, cell_num, margin) {
let rotate_num = int(random(4));
if (rotate_num % 2 == 0) {
translate(x + w / 2, y + h / 2);
translate(-cw / 2, -ch / 2);
let cdw = (cw - margin * (cell_num - 1)) / cell_num;
let cdh = (ch - margin * (cell_num - 1)) / cell_num;
for (let j = 0; j < cell_num; j++) {
for (let i = 0; i < cell_num; i++) {
let cx = i * (cdw + margin);
let cy = j * (cdh + margin);
if (min(cdw, cdh) > width / 10) {
setGrid(cx, cy, cdw, cdh, int(random(1, 5)), margin / 2);
drawArrow(cx + cdw / 2, cy + cdh / 2, cdw * 0.9, sep);
function drawArrow(cx, cy, d, sep) {
let angle = (int(random(4)) * 360) / 4;
for (let e = 1; e > 0; e -= 1 / sep) {
curveTightness(map(random(), 0, 1, -0.2, 0.9));
drawingContext.shadowBlur = d / 5;
drawingContext.shadowOffsetX = d / 10;
drawingContext.shadowOffsetY = d / 10;
for (let angle = 0; angle <= 180; angle += 180 / 2) {
arr.push(createVector(x, y));
curveVertex(-f / step, 0);
curveVertex(-f / step, -f / 2);
curveVertex(f / step, -f / 2);
curveVertex(f / step, 0);
drawGradientShape(0, 0, f * sqrt(2), true);
function drawGradientShape(x, y, d, bool = false) {
drawingContext.shadowColor = color(0, 0, 0, 25);
drawingContext.shadowBlur = d / 5;
let c = color(random(palette));
rotate((int(random(4)) * 360) / 4);
translate(-d / 2, -d / 2);
arc(0, 0, d * 2, d * 2, 0, 90);
drawingContext.shadowColor = color(0, 0, 100, 0);
let colors = shuffle(palette.concat());
for (let i = 0; i < 4; i++) {
let gradient = drawingContext.createRadialGradient(
gradient.addColorStop(0, colors[i % colors.length]);
gradient.addColorStop(1 / 5, color(0, 0, 100, 0));
drawingContext.fillStyle = gradient;
circle(-d / 2, -d / 2, d * 2);