## A creative coding Doomsday clock.

It's a creative coding animation made with Processing on Java programming language.

I tried to make a clock with 1fps animation. And gave up. XP

I just created an animation of the Archimedean spiral with many Perlin noise effects.

## Code example written in Processing.

Please feel free to use this example code.
To see other works based on my code is my pleasure. And my honor.

```// Two Minutes To Midnight.
// Processing 3.2.1
// @deconbatch
// 2018.05.29
// 1fps x 6s

/* ---------------------------------------------------------------------- */
class Dial {

int cntWidthMax;
int divRotate;
int cntRotateMax;
float basePetalSize;
float baseColor;
float petalBaseFrom, petalBaseTo, petalDivFrom, petalDivTo;

Dial() {

divRotate     = 91;                  // divide 360 degree
cntRotateMax  = 5 * 360 * divRotate; // draw while rotating
cntWidthMax   = 8;                   // repeat same shape with different ellipse size
basePetalSize = 5000.0;              // radius of shape
baseColor     = random(360);

}

void drawDial() {

for (int cntWidth = 1; cntWidth <= cntWidthMax; ++cntWidth) {

float noiseHue    = noiseHueStart + cntWidth / 300;
float noiseSat    = noiseSatStart;
float noiseBri    = noiseBriStart;
float noiseAlp    = noiseAlpStart;
float noiseShp    = noiseShpStart;
float sumRotation = 0;

for (int cntRotate = 0; cntRotate < cntRotateMax; ++cntRotate) {

// rotate fixed degree and calculate the plot point
float rotation = 1.0 / divRotate;
sumRotation += rotation;

float position = basePetalSize * abs(sin(radians(sumRotation / 500.0)) * sin(radians(sumRotation * 500)));
float brushHue = (baseColor + 360 + map(noise(noiseHue), 0.0, 1.0, 0.0, 60)) % 360;
float brushSat = map(noise(noiseSat), 0.0, 1.0, 30.0, 90.0);
float brushSiz = map(noise(noiseBri), 0.0, 1.0, 0.0, 1.0 * cntWidth * cntWidth);
float brushBri = map(noise(noiseBri), 0.0, 1.0, 0.0, 100.0) / cntWidth / cntWidth;
float brushAlp = map(noise(noiseAlp), 0.0, 1.0, 0.0, 100.0);

pushMatrix();
translate(0.0, position);
fill(brushHue, brushSat, brushBri, brushAlp);
ellipse(0.0, 0.0, brushSiz, brushSiz);
popMatrix();

noiseHue += 0.0003;
noiseSat += 0.0002;
noiseBri += 0.0001;
noiseAlp += 0.0002;
noiseShp += 0.0005;

}

}

}

}

/* ---------------------------------------------------------------------- */
Dial  dial;
float noiseShpStart = random(100.0);
float noiseHueStart = random(100.0);
float noiseBriStart = random(100.0);
float noiseAlpStart = random(100.0);
float noiseSatStart = random(100.0);

void setup() {

size(720, 720);
colorMode(HSB, 360, 100, 100, 100);
blendMode(SCREEN);
smooth();
noStroke();

dial = new Dial();

}

void draw() {

background(0, 0, 0);
translate(width / 2, height / 2);

dial.drawDial();

noiseHueStart += 0.1;
noiseSatStart += 0.5;
noiseBriStart -= 0.4;
noiseAlpStart -= 0.3;
noiseShpStart += 0.8;

saveFrame("frames/####.png");
if (frameCount >= 7) {
exit();
}

}

/*

This program is free software: you can redistribute it and/or modify
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/>
*/

```