Skip to content

Instantly share code, notes, and snippets.

@edmorais
Created January 10, 2023 11:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save edmorais/3b38cb01f2fe6820b2faeebd14949086 to your computer and use it in GitHub Desktop.
Save edmorais/3b38cb01f2fe6820b2faeebd14949086 to your computer and use it in GitHub Desktop.
Genuary2023 09: Flowers organized neatly into a grid
/*
____ __ __ __ ___ _
/ __/__/ /_ _____ ________/ /__ / |/ /__ _______ _(_)__
/ _// _ / // / _ `/ __/ _ / _ \ / /|_/ / _ \/ __/ _ `/ (_-<
/___/\_,_/\_,_/\_,_/_/ \_,_/\___/ /_/ /_/\___/_/ \_,_/_/___/
Genuary 2023! 09
* by Eduardo Morais 2023 - www.eduardomorais.pt
*/
// libs
// config
int $appWinWidth = 1024;
int $appWinHeight = 1024;
color $appWinBG = #000000; // #110D92;
color $appDefStroke = #FFFFFF;
int $saveFrameNum = 0; // 0 to deactivate
int $saveFrameOffset = 300; // wait before start recording
// constants
int COLS = 8;
int ROWS = 8;
int PADDING = 32;
int ROTATIONS = 4;
// globals
Arc[] arcs;
int cellX, cellY, maxRad, minRad;
/*
SETTINGS & SETUP
*/
void settings() {
size($appWinWidth, $appWinHeight);
pixelDensity(1);
}
color fgcolor() {
colorMode(HSB, 360, 100, 100);
return color(random(0, 60), random(50, 100), random(50, 100));
}
color bgcolor() {
colorMode(HSB, 360, 100, 100);
return color(random(150, 210), random(50, 100), random(10, 40));
}
void setup() {
background($appWinBG);
noFill();
noCursor();
frameRate(30);
cellX = width / COLS;
cellY = height / ROWS;
maxRad = cellX > cellY ? (cellY - PADDING) / 2 : (cellX - PADDING) / 2;
minRad = PADDING / 4;
arcs = new Arc[ROWS*COLS];
colorMode(HSB, 360, 100, 100);
for (int i=0; i<COLS; i++) {
for (int j=0; j<ROWS; j++) {
color c = fgcolor();
color bgc = bgcolor();
arcs[i*COLS +j] = new Arc(
cellX*i + cellX/2, cellY*j + + cellY/2, // pos
minRad, maxRad, // radius
int(random(2, 12)), // petals
random(-PI, PI), random(0.05, 0.25), // st ang, ang vel
bgc, c, int(random(2, 8)) // color, stroke
);
}
}
}
/*
DRAW
*/
void draw() {
for (int i=0; i<arcs.length; i++) {
arcs[i].update();
arcs[i].display();
}
if ($saveFrameNum > 0 &&
frameCount > $saveFrameOffset && frameCount - $saveFrameOffset <= $saveFrameNum)
saveFrame("frames/#####.tga");
}
/* arcs */
class Arc {
PVector position;
float minrad, maxrad, rad, strot, rot, avel;
int strokew, petals;
color col, bgcol;
Arc(int x, int y, float mird, float mxrd, int p, float sr, float av, color bgc, color c, int sw) {
position = new PVector(x, y);
minrad = mird;
maxrad = mxrd;
rad = random(minrad, maxrad);
rot = sr;
avel = sr >=0 ? av : 0-av;
petals = p;
bgcol = bgc;
col = c;
strokew = sw;
this.fillCell();
}
void update() {
rot+=avel;
if (rot > TAU*ROTATIONS || rot < -TAU*ROTATIONS) {
avel = 0 - avel;
col = fgcolor();
bgcol = bgcolor();
strokew = int(random(2, 8));
petals = int(random(2, 12));
this.fillCell();
}
rad = lerp(minrad, maxrad, abs(sin(rot*petals)));
}
void fillCell() {
blendMode(BLEND);
noStroke();
fill(bgcol, 192);
rectMode(CENTER);
rect(position.x, position.y, cellX-PADDING/4, cellY-PADDING/4);
}
void display() {
blendMode(SCREEN);
stroke(col, 64);
strokeWeight(strokew);
noFill();
PVector angvec = PVector.fromAngle(rot).setMag(rad);
PVector drawto = PVector.add(position, angvec);
line(position.x, position.y,
drawto.x, drawto.y);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment