Spend a month making one beautiful thing per day, given a bunch of prompts. A month late, but as they say, ’the second best time is now'.
Let’s do it!
26) My kid could have made that
Generic four legged animal generator. Or something like that?
Mostly, I made a function that can render a bunch of offsets as a polygon and then manually programmed a bunch of parameterized offsets.
That took longer than it probably should have. 😄
let gui;
let params = {
margin: 30,
midpoint: 150,
neckOffset: 10,
neckLength: 50,
neckWidth: 15,
headWidth: 50,
headHeight: 30,
bodyThickness: 50,
backLegWidth: 50,
backLegLength: 100,
backLegSpread: 20,
frontLegWidth: 25,
frontLegLength: 140,
frontLegSpread: 15,
}
function setup() {
createCanvas(400, 400);
background("white");
frameRate(5);
gui = createGuiPanel('params');
gui.addObject(params);
gui.setPosition(420, 0);
}
function draw() {
if (frameCount % 10 == 0) {
background("white");
}
stroke("purple");
noFill();
let margin = 30;
let midpoint = 200;
let locals = {...params};
for (let key in locals) {
locals[key] *= 1 + random() / 10;
}
push();
translate(locals.margin, locals.midpoint);
relativePolygon([
// Neck up
[locals.neckOffset, 0],
[-locals.neckOffset, -locals.neckLength],
// Head
[locals.neckWidth/2 - locals.headWidth/2, 0],
[0, -locals.headHeight],
[locals.headWidth, 0],
[0, locals.headHeight],
[-locals.headWidth/2 + locals.neckWidth/2, 0],
// Neck down
[locals.neckOffset, locals.neckLength],
// Across back
[
- ( // Rest neck
locals.neckOffset + locals.neckWidth
)
+ ( // Rest of back
width - 2 * locals.margin
),
0
],
// 4th leg
[0, locals.bodyThickness + locals.backLegLength],
[-locals.backLegWidth, 0],
[0, -locals.backLegLength],
// 3/4 split
[-locals.backLegSpread, 0],
// 3rd leg
[0, locals.backLegLength],
[-locals.backLegWidth, 0],
[0, -locals.backLegLength],
// Across belly
[0
+ ( // Go back to the butt
2 * (locals.backLegWidth)
+ locals.backLegSpread
)
- ( // Go to the front
width
- 2 * locals.margin
)
+ ( // Go back across front legs
2 * locals.frontLegWidth
+ locals.frontLegSpread
),
0
],
// 2nd leg
[0, locals.frontLegLength],
[-locals.frontLegWidth, 0],
[0, -locals.frontLegLength],
// 1/2 split
[-locals.frontLegSpread, 0],
// 1st leg
[0, locals.frontLegLength],
[-locals.frontLegWidth, 0],
[0, -locals.frontLegLength],
]);
pop();
}
function relativePolygon(offsets) {
beginShape();
vertex(0, 0);
let x = 0, y = 0;
for (let [xd, yd] of offsets) {
x += xd;
y += yd;
vertex(x, y);
}
endShape(CLOSE);
}
Posts in Genuary 2023:
- Genuary 2023.01: Perfect loop
- Genuary 2023.02: Made in 10 minutes
- Genuary 2023.03: Glitch art
- Genuary 2023.04: Intersections
- Genuary 2023.05: Debug view
- Genuary 2023.06: Steal like an artist
- Genuary 2023.07: Sample a color palette
- Genuary 2023.08: Signed Distance Functions
- Genuary 2023.09: Plants
- Genuary 2023.10: Generative Music
- Genuary 2023.11: Suprematism
- Genuary 2023.12: Tessellation
- Genuary 2023.13: Something you've always wanted to learn
- Genuary 2023.14: Asemic Writing
- Genuary 2023.15: Sine Waves
- Genuary 2023.16: Reflections of a Reflection
- Genuary 2023.17: A grid inside a grid inside a grid
- Genuary 2023.18: Definitely not a grid
- Genuary 2023.19: Black and white
- Genuary 2023.20: Art Deco
- Genuary 2023.21: Persian Carpet
- Genuary 2023.22: Shadows
- Genuary 2023.23: Moiré
- Genuary 2023.24: Textile
- Genuary 2023.25: Yayoi Kusama
- Genuary 2023.26: My kid could have made that
- Genuary 2023.27: In the style of Hilma Af Klint
- Genuary 2023.28: Generative poetry
- Genuary 2023.29: Maximalism
- Genuary 2023.30: Minimalism
- Genuary 2023.31: Break a previous image