It creates funny shapes and funny motions.
A creative coding funny animation.
It's a creative coding animation work written in the 'Processing' programming language. It draws a shape like a curl code of an erstwhile telephone.
When I tried to make some creative coding works with a random walk with Perlin noise in angle, I found interesting shapes by chance.
And I made these shapes as funny animation and colored of felt tip pen.
This code does not display any images on the screen but generates image files for animation. You can make an animation with these files.
The 'Processing' code example.
Please feel free to use this example code under the terms of the GPL.
To see other works based on my code is my pleasure. And my honor.
/**
* Too Pooped to Pop.
* random walk with random angle makes telephone receiver curl code.
*
* @author @deconbatch
* @version 0.1
* Processing 3.2.1
* 2019.05.26
*/
void setup() {
size(720, 720);
colorMode(HSB, 360, 100, 100, 100);
blendMode(DIFFERENCE);
smooth();
noStroke();
noLoop();
}
void draw() {
int frmCntMax = 24 * 6; // for 24fps x 6s animation
int lineCntMax = 9;
float hueInit = random(360.0);
translate(width * 0.5, height * 0.5);
for (int frmCnt = 0; frmCnt < frmCntMax; ++frmCnt) {
float frmRatio = map(frmCnt, 0, frmCntMax, 0.0, 1.0);
float hueBase = hueInit;
background(0.0, 0.0, 90.0, 100.0);
for (int lineCnt = 0; lineCnt < lineCntMax; ++lineCnt) {
float lineRatio = map(lineCnt, 0, lineCntMax, 0.0, 1.0);
float easeRatio = easeInOutQuadratic((frmRatio + lineRatio) % 1.0);
pushMatrix();
rotate(TWO_PI * lineRatio);
fill(hueBase % 360.0, 80, 10.0, 100.0);
drawLine(lineRatio, easeRatio);
hueBase += 30.0;
popMatrix();
}
saveFrame("frames/" + String.format("%04d", frmCnt) + ".png");
}
exit();
}
/**
* drawLine
* @param _phase 0.0 - 1.0 : make line shape with this.
* @param _animate 0.0 - 1.0 : animate line shape with this.
*/
private void drawLine(float _phase, float _animate) {
float rotation = 0.0;
for (float radius = 0; radius <= width; radius += 1.0) {
float rRatio = map(radius, 0, width, 0.0, 1.0);
// make line curve with noise
float pointX = 0.7 * radius * cos(TWO_PI * noise(rRatio * 0.2));
float pointY = 0.7 * radius * sin(TWO_PI * noise(rRatio * 0.2));
// line shape and animation
float lShape = sin(TWO_PI * (_phase + rRatio)) * 0.1;
float lAnimate = sin(PI * _animate) * 0.05; // cyclic and slow
rotation += lShape + lAnimate;
float eSiz = sin(PI * rRatio) * 3.0 + 2.0;
float eRadius = 2.0 + eSiz + rRatio * 30.0; // IMPORTANT! make line curl
pushMatrix();
translate(pointX, pointY);
rotate(rotation);
ellipse(eRadius, eRadius, eSiz * eSiz, eSiz * eSiz);
popMatrix();
}
}
/**
* easeInOutQuadratic easing function.
* @param _t 0.0 - 1.0 : linear value.
* @return float 0.0 - 1.0 : eased value.
*/
private float easeInOutQuadratic(float _t) {
_t *= 2.0;
if (_t < 1.0) {
return pow(_t, 2) / 2.0;
}
_t -= 1.0;
return -(_t * (_t - 2) - 1.0) / 2.0;
}
/*
Copyright (C) 2019- deconbatch
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>
*/

