Flag Of United Kingdom
// United Kingdom (Union Flag / Union Jack) - Jim Bumgardner
// Reference: http://en.wikipedia.org/wiki/Union_Flag
int kHeight = 250; // Flag will still draw correctly if height is changed.
float aspectRatio = 2/1.0; // Flag will still draw correctly if aspect ratio is changed (try 3/2.0)
size((int) (kHeight*aspectRatio), kHeight);
noStroke();
smooth();
color blueColor = color(0,36,125);
color whiteColor = color(255,255,255);
color redColor = color(207,20,43);
float fatRedCrossWidth= height/5.0;
float thinRedCrossWidth = height/15.0;
float whiteDiagonalCrossWidth = height/5.0;
float fatWhiteCrossWidth = height/3.0;
// Background blue field
fill(blueColor);
rect(0,0, width, height);
// White Diagonal Cross (not too hard, because it's centered on corners)
stroke(whiteColor);
strokeCap(PROJECT);
noFill();
strokeWeight(whiteDiagonalCrossWidth);
line(0,0,width,height);
line(0,height,width,0);
// Thin Red Diagonal Lines (the most complicated bit, because each one is offset)
// This is the ratio of the diagonal stripe's height on the y-axis to it's cross section
float yRatio = 1/sin(radians(90)-atan2(height,width));
// This is the amount to move the (centered stripe) so it lines up with corner, creating pinwheel effect.
float offsetY = thinRedCrossWidth*yRatio/2;
stroke(redColor);
strokeWeight(thinRedCrossWidth);
line(0,0+offsetY,width/2,height/2+offsetY); // top left stripe
line(width,0-offsetY,width/2,height/2-offsetY); // top right stripe
line(width,height-offsetY,width/2,height/2-offsetY); // bot right stripe
line(0,height+offsetY,width/2,height/2+offsetY); // bot left stripe
strokeWeight(1);
noStroke();
// Fat White Cross
fill(whiteColor);
rect(0,height/2-fatWhiteCrossWidth/2, width, fatWhiteCrossWidth);
rect(width/2-fatWhiteCrossWidth/2,0, fatWhiteCrossWidth, height);
// Fat Red Cross
fill(redColor);
rect(0,height/2-fatRedCrossWidth/2, width, fatRedCrossWidth);
rect(width/2-fatRedCrossWidth/2,0, fatRedCrossWidth, height);