This creative coding art work was written in Processing Java programming language.
Many lines draw something like ripples on the sand. It derived from Big Bang.

## Processing example code.

```// Sand Ripples
// Processing 3.2.1
// 2017.07.29

import java.util.Random;

/* ---------------------------------------------------------------------- */
class Utils {

Random obj_random;

Utils() {
obj_random = new Random();
}

float gaussdist(float pmean, float plimit, float pdevi) {
/**
Gaussian distribution
1.parameters.
pmean  : mean value
plimit : max value of abs(deviation)
ex. plimit >= 0
pmean = 0.5, plimit = 0.5 -> return value = from 0.0 to 1.0
pdevi  : standard deviation value
ex. good value? -> pdevi = plimit / 2
2.return.
gaussian distribution
**/

if (plimit == 0) {
return pmean;
}

float gauss = (float) obj_random.nextGaussian() * pdevi;
// not good idea
if (abs(gauss) > plimit) {
gauss = pow(plimit, 2) / gauss;
}

return pmean + gauss;

}
}

/* ---------------------------------------------------------------------- */
abstract class PshapeElement {

PShape anElement;
float elementColor, elementSaturation, elementBright, elementAlpha;

PshapeElement() {
anElement = pscreateElement();
elementColor = 0;
elementSaturation = 0;
elementBright = 0;
elementAlpha = 0;
}

abstract PShape pscreateElement();

void setElementFill(float pcolor, float psaturation, float pbright, float palpha) {
elementColor = pcolor;
elementSaturation = psaturation;
elementBright = pbright;
elementAlpha = palpha;
resetColor();
}

void resetColor() {
anElement.setStroke(color(elementColor, elementSaturation, elementBright, elementAlpha));
}

void changeColor(float scolor) {
elementColor = scolor;
resetColor();
}

void changeBright(float sbright) {
elementBright = sbright;
resetColor();
}

void resetSize() {
anElement.resetMatrix();
}

void changeSize(float scaleX, float scaleY) {
anElement.scale(scaleX, scaleY);
}

}

void show() {
shape(anElement);
}

}

/* ---------------------------------------------------------------------- */
class LineBrush extends PshapeElement {

LineBrush() {
super();
}

PShape pscreateElement() {

stroke(0.0, 0.0, 0.0, 0.0);
noFill();
PShape psDp = createShape(LINE, -0.3, -0.3, 0.3, 0.3);
return psDp;

}

}

/* ---------------------------------------------------------------------- */

Utils ut;
PshapeElement pLine;

void setup() {
size(900, 900);
colorMode(HSB, 360, 100, 100, 100);
blendMode(SCREEN);
strokeWeight(0.001);
smooth(8);
noLoop();
//  frameRate(1);

ut = new Utils();
pLine = new LineBrush();

}

void draw() {

background(0, 0, 0);

float baseColor = random(0.0, 360.0);
for (int cntCircle = 0; cntCircle < 3; ++cntCircle) {
baseColor = (baseColor + 30) % 360.0;
drawPixels(baseColor);
}

saveFrame("frames/####.png");
exit();

}

void canvasRotation(float degrees, float centerX, float centerY) {

translate(centerX, centerY);
translate(-centerX + random(0.6), -centerY + random(0.6));

}

void drawPixels(float rippleColor) {

float sumRotation = 0;
float centerX = width / 8 + random(3 * width / 4);
float centerY = height / 8 + random(3 * height / 4);
int divCntMax = 10 + round(ut.gaussdist(10.0, 5.0, 2.5));

for (int divCnt = 1; divCnt <= divCntMax; ++divCnt) {

float lineBri = map(random(1.0), 0.0, 1.0, 1.0, 100.0);
float idxDiv = width / divCnt;
int drawCntMax = round(ut.gaussdist(250.0, 100.0, 50.0));

for (int drawCnt = 0; drawCnt < drawCntMax; ++drawCnt) {

float lineHue = (rippleColor + ut.gaussdist(0.0, 60.0, 30.0)) % 360.0;
float rotation = divCnt * ut.gaussdist(10.0, 3.0, 2.0);
canvasRotation(rotation, centerX, centerY);
sumRotation += rotation;

for (float idxW = 0.0; idxW < width + idxDiv; idxW += idxDiv) {
for (float idxH = 0.0; idxH < height + idxDiv; idxH += idxDiv) {

float lineSat = map(random(1.0), 0.0, 1.0, 10.0, 30.0);
float lineAlp = map(random(1.0), 0.0, 1.0, 20.0, 100.0);
float lineSize = map(random(1.0), 0.0, 1.0, 1.0, 4.0);

pushMatrix();
translate(idxW, idxH);
pLine.resetSize();
pLine.changeSize(lineSize, lineSize);
pLine.setElementFill(lineHue, lineSat, lineBri, lineAlp);
pLine.show();
popMatrix();

}
}
}
}

canvasRotation(-sumRotation, centerX, centerY);

}

/*

This program is free software: you can redistribute it and/or modify