Code
float[][] eggpoints = {{0.207,-0.707},{0.26,-0.647},{0.307,-0.587},{0.353,-0.52},{0.393,-0.453},{0.427,-0.38},{0.453,-0.307},{0.473,-0.233},{0.487,-0.153},{0.5,-0.08},{0.5,0.0},{0.493,0.08},{0.473,0.153},{0.447,0.227},{0.407,0.293},{0.353,0.353},{0.293,0.407},{0.227,0.447},{0.153,0.473},{0.08,0.493},{0.0,0.5},{-0.08,0.493},{-0.153,0.473},{-0.227,0.447},{-0.293,0.407},{-0.353,0.353},{-0.407,0.293},{-0.447,0.227},{-0.473,0.153},{-0.493,0.08},{-0.5,0.0},{-0.5,-0.08},{-0.487,-0.153},{-0.473,-0.233},{-0.453,-0.307},{-0.427,-0.38},{-0.393,-0.453},{-0.353,-0.52},{-0.307,-0.587},{-0.26,-0.647},{-0.207,-0.707},{-0.147,-0.753},{-0.073,-0.787},{0.0,-0.793},{0.073,-0.787},{0.147,-0.753}};
float[][][] letters = {{{23.0,22.0,28.0},{41.5,0.5,15.0},{34.5,0.5,8.0}},{{39.5,0.5,25.0},{33.0,1.0,10.0},{26.5,0.5,9.0}},{{2.5,0.5,32.0},{14.0,1.0,30.0},{27.5,0.5,34.0}},{{15.5,0.5,1.0},{8.0,1.0,29.0},{13.5,0.5,30.0}},{{35.0,1.0,3.0},{30.5,0.5,8.0},{25.0,1.0,14.0}},{{24.0,1.0,37.0},{3.0,1.0,35.0},{31.5,0.5,7.0}},{{8.5,0.5,31.0},{13.5,0.5,6.0},{11.5,0.5,21.0}},{{37.0,1.0,23.0},{3.5,1.5,15.0},{31.5,0.5,9.0}},{{1.0,1.0,39.0},{20.5,0.5,43.0},{24.5,0.5,17.0}},{{3.0,1.0,18.0},{16.5,0.5,23.0},{29.0,1.0,21.0}},{{37.5,0.5,23.0},{1.5,0.5,30.0},{12.0,1.0,31.0}},{{37.0,1.0,21.0},{23.0,1.0,14.0},{15.5,0.5,12.0}},{{27.0,1.0,40.0},{42.5,1.5,20.0},{15.0,1.0,0.0}},{{24.0,1.0,37.0},{37.0,1.0,14.0},{15.5,0.5,1.0}},{{39.5,0.5,45.0},{26.5,0.5,19.0},{14.5,0.5,20.0}},{{38.5,0.5,23.0},{36.0,1.0,6.0},{30.5,0.5,5.0}},{{15.5,0.5,32.0},{17.5,0.5,13.0},{22.5,22.5,41.0}},{{38.0,1.0,5.0},{30.5,0.5,6.0},{15.0,1.0,33.0}},{{3.0,1.0,34.0},{11.5,1.5,33.0},{25.5,0.5,12.0}},{{19.5,0.5,42.0},{37.5,0.5,3.0},{15.5,0.5,21.0}},{{25.0,1.0,38.0},{24.0,1.0,16.0},{6.0,1.0,17.0}},{{22.5,1.5,37.0},{19.0,1.0,2.0},{22.5,0.5,19.0}},{{23.0,1.0,36.0},{21.5,1.5,44.0},{20.0,1.0,6.0}},{{37.0,1.0,15.0},{26.5,0.5,3.0},{13.5,0.5,17.0}},{{37.0,1.0,8.0},{2.0,1.0,18.0},{20.5,0.5,17.0}},{{36.0,1.0,5.0},{27.5,0.5,4.0},{14.0,1.0,29.0}}};
int[][] word = {{0,1,2,3,4,5},{6,7,8,9,10,11},{12,13,14,15,16,17},{18,19,20,21,22,23},{24,25}};
//int[][] word = {{17,0,13,2,8,3}}; //just a bit...
int let;
float w = 50;
float xpadding,ypadding;
//crack variables
float minchaos = 1;
float maxchaos = 4;
float crackdensity = .22;
float crackrate = 1.08;
int crackprob = 200;
float probrate = 2;
int maxwait = 3000;
//yolk variables
float yolkmax = 80;
float yolkmin = 30;
float yolkspeed = .005;
egg[] eggies;
boolean smoo = false;
void setup(){
size(400,400);
ellipseMode(CENTER_DIAMETER);
for(int i=0;i<word.length;i++){
for(int j=0;j<word[i].length;j++){
let++;
}
}
eggies = new egg[let];
int n = 0;
ypadding = (400-((word.length-1)*(w*1.3+10)))/2;
xpadding = (400-((word[0].length-1)*(w+10)))/2;
for(int i=0;i<word.length;i++){
for(int j=0;j<word[i].length;j++){
eggies[n] = new egg(xpadding+j*(w+10),ypadding+i*(w*1.3+10),word[i][j]);
n++;
}
}
}
void loop(){
background(50);
if(smoo==true){
smooth();
}
//draw yolk first
noStroke();
fill(75,75,60,240);
for(int i=0;i<eggies.length;i++){
for(int j=0;j<3;j++){
eggies[i].cracks[j].yolk();
}
}
//draw eggs second
for(int i=0;i<eggies.length;i++){
strokeWeight(2.3);
stroke(105,105,60,150);
eggies[i].show();
//draw cracks last
noStroke();
fill(155,155,100,150);
for(int j=0;j<3;j++){
eggies[i].cracks[j].show();
eggies[i].cracks[j].hatch();
}
}
}
class egg{
float x,y;
int l;
crack[] cracks = new crack[3];
egg(float x1,float y1,int l1){
x = x1;
y = y1;
l = l1;
float temp = random(maxwait);
for(int i=0;i<3;i++){
cracks[i] = new crack(x+w*eggpoints[int(letters[l][i][0]+letters[l][i][1])][0],y+w*eggpoints[int(letters[l][i][0]+letters[l][i][1])][1],x+w*eggpoints[int(letters[l][i][0]-letters[l][i][1])][0],y+w*eggpoints[int(letters[l][i][0]-letters[l][i][1])][1],x+w*eggpoints[int(letters[l][i][2])][0],y+w*eggpoints[int(letters[l][i][2])][1]);
cracks[i].wait = temp;
}
}
void update(){
float temp = random(maxwait);
for(int i=0;i<3;i++){
cracks[i] = new crack(x+w*eggpoints[int(letters[l][i][0]+letters[l][i][1])][0],y+w*eggpoints[int(letters[l][i][0]+letters[l][i][1])][1],x+w*eggpoints[int(letters[l][i][0]-letters[l][i][1])][0],y+w*eggpoints[int(letters[l][i][0]-letters[l][i][1])][1],x+w*eggpoints[int(letters[l][i][2])][0],y+w*eggpoints[int(letters[l][i][2])][1]);
cracks[i].wait = temp;
}
}
void show(){
//draw egg
beginShape(POLYGON);
for(int i=0;i<eggpoints.length;i++){
fill(255,255,170+i);
vertex(x+w*eggpoints[i][0],y+w*eggpoints[i][1]);
}
endShape();
}
}
class crack{
float m1,m2,b1,b2,chaos,x,inc,crackage,prob,wait;
int cracks;
float[][] crackpoints1;
float[][] crackpoints2;
float[][] yolks;
crack(float pAx,float pAy,float pBx,float pBy,float pCx,float pCy){
//determine line properties
m1 = (pAy-pCy)/(pAx-pCx+.01);
m2 = (pBy-pCy)/(pBx-pCx+.01);
b1 = pAy-pAx*m1;
b2 = pBy-pBx*m2;
//add some crackage
cracks = int(floor(sqrt(sq((pAx+pBx)/2-pCx)+sq((pAy+pBy)/2-pCy))*crackdensity/3)*3);
chaos = minchaos+random(maxchaos-minchaos);
//setup cracks
x = pAx;
inc = (pCx-pAx)/cracks;
crackage = 0.01;
prob = crackprob;
crackpoints1 = new float[cracks+1][2];
crackpoints1[0][0] = pAx;
crackpoints1[0][1] = pAy;
for(int i=1;i<cracks;i++){
crackpoints1[i][0] = x+random(-chaos,chaos);
crackpoints1[i][1] = m1*x+b1+random(-chaos,chaos);
x += inc;
}
crackpoints1[cracks][0] = pCx;
crackpoints1[cracks][1] = pCy;
x = pBx;
inc = (pCx-pBx)/cracks;
crackpoints2 = new float[cracks+1][2];
crackpoints2[0][0] = pBx;
crackpoints2[0][1] = pBy;
for(int i=1;i<cracks;i++){
crackpoints2[i][0] = x+random(-chaos,chaos);
crackpoints2[i][1] = m2*x+b2+random(-chaos,chaos);
x += inc;
}
crackpoints2[cracks][0] = pCx;
crackpoints2[cracks][1] = pCy;
//setup yolks
yolks = new float[2][4];
yolks[0][0] = pCx;
yolks[0][1] = pCy;
yolks[0][2] = 0;
yolks[0][3] = (yolkmin+random(yolkmax-yolkmin))/2;
yolks[1][0] = (pAx+pBx)/2;
yolks[1][1] = (pAy+pBy)/2;
yolks[1][2] = 0;
yolks[1][3] = yolkmin+random(yolkmax-yolkmin);
}
void hatch(){
if(crackage<1){
if(millis()>wait&&random(prob)<1){
crackage *= crackrate;
if(crackage>1){
crackage = 1;
}
prob /= probrate;
}
}
}
void show(){
/*
//this would work if the polygon rendering didn't suck
beginShape(POLYGON);
for(int i=0;i<int(floor((cracks+1)*crackage));i++){
vertex(crackpoints1[i][0],crackpoints1[i][1]);
}
for(int i=max(0,int(floor((cracks+1)*crackage)-1));i>=0;i--){
vertex(crackpoints2[i][0],crackpoints2[i][1]);
}
endShape();
*/
beginShape(TRIANGLE_STRIP);
for(int i=0;i<int(floor((cracks+1)*crackage));i++){
vertex(crackpoints1[i][0],crackpoints1[i][1]);
vertex(crackpoints2[i][0],crackpoints2[i][1]);
}
endShape();
}
void yolk(){
if(crackage>.5){
yolks[0][2] += (yolks[0][3]-yolks[0][2])*yolkspeed;
yolks[1][2] += (yolks[1][3]-yolks[1][2])*yolkspeed;
ellipse(yolks[0][0],yolks[0][1],yolks[0][2]*2,yolks[0][2]*2);
ellipse(yolks[1][0],yolks[1][1],yolks[1][2]*2,yolks[1][2]*2);
}
}
}
void keyPressed(){
if(key=='s'||key=='S'){
if(smoo==true){
smoo = false;
}else{
smoo = true;
}
}
}
023 -- Intermorphable Alphabet Complete: Your Complete Alphabet
Statement:Show your complete alphabet on a single 400x400 canvas.
i changed mine because eggs are pretty