built with Processing

void setup() {
size (1100, 745, P3D);
stroke(0, 50); // stroke colour, 2nd value for transparency
}
void draw() {
background(179, 217, 241);
// build letter A
translate(500, 100);
drawSpiral();
translate(-30, 78);
drawSpiral();
translate(-25, 78);
drawSpiral();
translate(-25, 78);
drawSpiral();
translate(-25, 78);
drawSpiral();
translate(-25, 78);
drawSpiral();
translate(-25, 78);
drawSpiral();
translate(185, -390);
drawSpiral();
translate(25, 78);
drawSpiral();
translate(25, 78);
drawSpiral();
translate(25, 78);
drawSpiral();
translate(25, 78);
drawSpiral();
translate(25, 78);
drawSpiral();
translate(-120, -156);
drawSpiral();
translate(-70, 0);
drawSpiral();
}
void drawSpiral() {
int radius = 60; // determines size of spiral
rotateY(mouseY*0.0005); // determins speed/level of rotation
rotateX(mouseX*0.0002);
float s = 0;
float t = 0;
float lastx = 0;
float lasty = 0;
float lastz = 0;
while (t < 500) {
s += 25;
t += 0.4;
float radianS=radians(s); // convert angles to radians
float radianT=radians(t);
float thisx= 0 + (radius * cos(radianS) * sin(radianT) + random(50));
float thisy= 0 + (radius * cos(radianS) * sin(radianS) + random(50));
float thisz= 0 + (radius * cos(radianT) + random(20));
if (lastx != 0) { // != operator for not equal to
strokeWeight(1);
line(thisx, thisy, thisz, lastx, lasty, lastz);
strokeWeight(2);
point (thisx, thisy, thisz);
}
lastx = thisx;
lasty = thisy;
lastz = thisz;
}
}