Flag Of Australia
// Australia
// http://en.wikipedia.org/wiki/File:Flag_of_Australia_template.svg
int kHeight = 250; // The only number that needs changing
// The RGB red and blue specified in the Wikipedia entry are super saturated, and don't look
// good to me, so I commented them out in favor of the Pantone equivalents listed here.
// http://www.umsiko.co.za/links/color.html
// color blueColor = color(0,0,139); // RGB recommendation
// color whiteColor = color(255,255,255); // RGB recommendation
// color redColor = color(255,0,0); // RGB recommendation
color blueColor = color(0,38,127); // Pantone 280C
color whiteColor = color(255,255,255); // Pantone Safe
color redColor = color(234,4,55); // Pantone 185C
PGraphics unionJack;
void setup()
{
size(kHeight*2, kHeight);
noStroke();
smooth();
noLoop();
unionJack = createGraphics(width/2, height/2, P2D);
unionJack.beginDraw();
drawUnionJack(unionJack);
unionJack.endDraw();
}
void drawUnionJack(PGraphics pg)
{
int w = pg.width;
int h = pg.height;
float fatRedCrossWidth= h/5.0;
float thinRedCrossWidth = h/15.0;
float whiteDiagonalCrossWidth = h/5.0;
float fatWhiteCrossWidth = h/3;
// Background blue field
pg.smooth();
pg.noStroke();
pg.fill(blueColor);
pg.rect(0,0, pg.width, pg.height);
// White Diagonal Cross
pg.stroke(whiteColor);
pg.strokeCap(PROJECT);
pg.noFill();
pg.strokeWeight(whiteDiagonalCrossWidth);
pg.line(0,0,w,h);
pg.line(0,h,w,0);
// Thin Red Diagonal Lines (the most complicated bit, because each one is offset)
float yRatio = 1/sin(radians(90)-atan2(h,w));
// This is the amount to move the (centered stripe) so it lines up with corner, creating pinwheel effect.
float offsetY = thinRedCrossWidth*yRatio/2;
pg.stroke(redColor);
pg.strokeWeight(thinRedCrossWidth);
pg.line(0,0+offsetY,w/2,h/2+offsetY); // top left stripe
pg.line(w,0-offsetY,w/2,h/2-offsetY); // top right stripe
pg.line(w,h-offsetY,w/2,h/2-offsetY); // bot right stripe
pg.line(0,h+offsetY,w/2,h/2+offsetY); // bot left stripe
pg.strokeWeight(1);
pg.noStroke();
// Thin Red Diagonal Cross pinwheel segments...
pg.fill(redColor);
pg.beginShape();
pg.vertex(0,0);
pg.vertex(w/2, h/2);
pg.vertex(w/2+cos(PI-PI/4)*thinRedCrossWidth,h/2+sin(PI-PI/4)*thinRedCrossWidth);
pg.vertex(0+cos(PI-PI/4)*thinRedCrossWidth,0+sin(PI-PI/4)*thinRedCrossWidth);
pg.endShape(CLOSE);
pg.beginShape();
pg.vertex(w,0);
pg.vertex(w/2, h/2);
pg.vertex(w/2+cos(PI+PI/4)*thinRedCrossWidth,h/2+sin(PI+PI/4)*thinRedCrossWidth);
pg.vertex(w+cos(PI+PI/4)*thinRedCrossWidth,0+sin(PI+PI/4)*thinRedCrossWidth);
pg.endShape(CLOSE);
pg.beginShape();
pg.vertex(0,h);
pg.vertex(w/2, h/2);
pg.vertex(w/2+cos(PI/4)*thinRedCrossWidth,h/2+sin(PI/4)*thinRedCrossWidth);
pg.vertex(0+cos(PI/4)*thinRedCrossWidth,h+sin(PI/4)*thinRedCrossWidth);
pg.endShape(CLOSE);
pg.beginShape();
pg.vertex(w,h);
pg.vertex(w/2, h/2);
pg.vertex(w/2+cos(-PI/4)*thinRedCrossWidth,h/2+sin(-PI/4)*thinRedCrossWidth);
pg.vertex(w+cos(-PI/4)*thinRedCrossWidth,h+sin(-PI/4)*thinRedCrossWidth);
pg.endShape(CLOSE);
// Fat White Cross
pg.fill(whiteColor);
pg.rect(0,h/2-fatWhiteCrossWidth/2, w, fatWhiteCrossWidth);
pg.rect(w/2-fatWhiteCrossWidth/2,0, fatWhiteCrossWidth, h);
// Fat Red Cross
pg.fill(redColor);
pg.rect(0,h/2-fatRedCrossWidth/2, w, fatRedCrossWidth);
pg.rect(w/2-fatRedCrossWidth/2,0, fatRedCrossWidth, h);
}
void drawAster(int nbrPoints, float cx, float cy, float odiam, float idiamRatio)
{
float orad = odiam / 2;
float irad = orad * idiamRatio;
pushMatrix();
translate(cx, cy);
rotate(radians(-90)); // Point upwards
float a = TWO_PI / nbrPoints;
beginShape();
for (int i = 0; i < nbrPoints; ++i) {
vertex( cos( a * i) * orad, sin( a * i) * orad);
vertex( cos( a * (i+.5)) * irad, sin( a * (i+.5)) * irad);
}
endShape(CLOSE);
popMatrix();
}
void draw()
{
background(blueColor);
image(unionJack, 0, 0);
fill(whiteColor);
drawAster( 7, width/4.0, height*3/4.0, width*3/20.0, 4/9.0); // Commonwealth star
drawAster( 7, width*3/4.0, height*5/6.0, width*1/14.0, 4/9.0); // Alpha Crucis
drawAster( 7, width*5/8.0, height*7/16.0, width*1/14.0, 4/9.0); // Beta Crucis
drawAster( 7, width*3/4.0, height*1/6.0, width*1/14.0, 4/9.0); // Gamma Crucis
drawAster( 7, width*31/36.0, height*89/240.0, width*1/14.0, 4/9.0); // Delta Crucis
drawAster( 5, width*4/5.0, height*13/24.0, width*1/24.0, 4/9.0); // Epsilon Crucis
}