Logo Bordello

My favorite band, Gogol Bordello, changes its logo with each album. While each logo feels like the band, there is little consistency in design. It was a perfect starting point for my generative logo assignment.

To redesign Gogol Bordello’s logo, the question to answer was, What is Gogol Bordello? It is the essence and progenitor of gypsy punk, the raucous symbiosis of east and west and north and south. There are songs in English, songs in Russian, songs with a Latin flavor. I played with these ideas in preliminary sketches.

I wanted it to feel wild and defiant, like graffiti. I made a Russian E as a subtle nod to Russian lyrics. I added stripes to reference guitar and violin strings. I randomized the y-position of the letters to give them a jumbled look; I also randomized the color selection. Every time I run the program, the logo is a different color and configuration. I printed three of my favorite results on a poster.

This is the code for the letter class. I used arcs to draw the round edges of the letters.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
class Letter
{
  float distX, distY;  //bounding box parameters
  float xpos, ypos;    //starting (x,y) for upper left corner
 
  Letter(float xpos_, float ypos_, float distX_, float distY_){
    distX = distX_;  
    distY = distY_;  
    xpos = xpos_;  
    ypos = ypos_;  
  }
 
  void b()
  {
    canvas.pushMatrix();
    canvas.ellipseMode(CENTER);
    canvas.translate(distX/2, 0);  //center letter in bounding box
    canvas.line(xpos, ypos, xpos, ypos + distY);
    canvas.arc(xpos, ypos + distY/4, 2*distX/3, distY/2, -3*PI/4, PI/2);  //top arc
    canvas.arc(xpos, ypos + 3*distY/4, distX, distY/2, -PI/2, PI/2);  //bottom arc
    canvas.popMatrix();
  }
 
  void d()
  {
    canvas.pushMatrix();
    canvas.ellipseMode(RADIUS);
    canvas.translate(distX/4, 0);  //center letter in bounding box
    canvas.line(xpos + 2*distX/3, ypos, xpos + 2*distX/3, ypos + distY);
    canvas.arc(xpos + 3*distX/4, ypos + 3*distY/4, 2*distX/3, distY/3, PI/2, 3*PI/2);
    canvas.popMatrix();
  }
 
  void e()
  {
    canvas.pushMatrix();
    canvas.ellipseMode(CENTER);
    canvas.translate(distX/4, 0);  //center letter in bounding box
    canvas.arc(xpos, ypos + distY/2, distX, distY, -PI/2, PI/2);
    canvas.line(xpos, ypos + distY/2, xpos + distX/2, ypos + distY/2);  //horizontal line
    canvas.popMatrix();
  }
 
  void g()
  {
 
    canvas.pushMatrix();
    canvas.ellipseMode(CENTER);
    canvas.translate(-distX/4, 0);  //center letter in bounding box
    canvas.arc(xpos + distX, ypos + distY/2, distX, distY, PI/2, 3*PI/2);
    canvas.line(xpos + distX, ypos + distY/2, xpos + distX, ypos + 1.25*distY);  //vertical line
    canvas.line(xpos + 3*distX/4, ypos + distY/2, xpos + distX, ypos + distY/2);  //horizontal line
    canvas.popMatrix();
  }
 
  void l()
  {
    canvas.pushMatrix();
    canvas.translate(distX/8, 0);  //center letter in bounding box
    canvas.line(xpos, ypos, xpos, ypos + distY);  //vertical line
    canvas.line(xpos, ypos + distY, xpos + 3*distX/4, ypos + 3*distY/4);  //horizontal line
    canvas.popMatrix();
  }
 
  void o()
  {
    canvas.pushMatrix();
    canvas.ellipseMode(CENTER);
    canvas.ellipse(xpos + distX/2, ypos + distY/2, distX, distY);
    canvas.popMatrix();
  }
 
  void r()
  {
    canvas.pushMatrix();
    ellipseMode(CENTER);
    canvas.translate(distX/4, 0);
    canvas.line(xpos, ypos, xpos, ypos + distY);
    canvas.arc(xpos, ypos + distY/3, distX, distY/2, -3*PI/4, PI/2);
    canvas.line(xpos, ypos + distY/2, xpos + distX, ypos + distY);
    canvas.popMatrix();
  }
}

This is the main sketch code. The complete code is on Github.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//Kim Ash
//Printing Code
//logoGB - creates a generative logo for Gogol Bordello
 
PGraphics canvas;
int canvas_width = 5100;
int canvas_height = 3825;
 
float ratioWidth = 1;
float ratioHeight = 1;
float ratio = 1;
 
Letter [] gogol;
Letter [] bordello;
 
void setup()
{ 
  size(510, 383);
  canvas = createGraphics(canvas_width, canvas_height);
  calculateResizeRatio();
  gogol = new Letter[5];
  bordello = new Letter[8]; 
 
  canvas.beginDraw();
    canvas.colorMode(HSB, 360, 100, 100);
    canvas.background(360, 100, 0);
    grid(canvas.width/50);
    canvas.smooth();
    canvas.noFill();
    canvas.strokeCap(PROJECT);
    canvas.strokeJoin(BEVEL);
    canvas.stroke(random(360), random(70,100), 100);
    canvas.strokeWeight(canvas.height/37);
 
    //Gogol
    canvas.pushMatrix();
    canvas.translate(canvas.width/5, 0);
    for(int i=0; i<5; i++)  {
      gogol[i] = new Letter(1.25*i*canvas.width/10, canvas.height/4 + random(canvas.height/8), canvas.width/10, canvas.height/8);
    }
    gogol[0].g();
    gogol[1].o();
    gogol[2].g();
    gogol[3].o();
    gogol[4].l();
    canvas.popMatrix();
 
    //Bordello
    canvas.pushMatrix();
    canvas.translate(0, canvas.height/4);
    for(int i=0; i<8; i++)  {
        bordello[i] = new Letter(1.25*i*canvas.width/10, canvas.height/4 + random(canvas.height/8), canvas.width/10, canvas.height/8);
    }
    bordello[0].b();
    bordello[1].o();
    bordello[2].r();
    bordello[3].d();
    bordello[4].e();
    bordello[5].l();
    bordello[6].l();
    bordello[7].o();
    canvas.popMatrix();
 
    //stripes
    for(int i=0; i<=canvas.width; i+=(canvas.width/140)){
      canvas.stroke(360, 100, 0);
      canvas.strokeWeight(canvas.height/200);
      canvas.line(i, 0, i, canvas.height);
    }
  canvas.endDraw();
 
  float resizedWidth = (float) canvas.width * ratio;
  float resizedHeight = (float) canvas.height * ratio;
  //displays canvas onscreen
  image(canvas, (width/2) - (resizedWidth/2), (height/2) - (resizedHeight/2), resizedWidth, resizedHeight);
 
  canvas.save("logoGB.tiff");
}
 
/* resizing function */
void calculateResizeRatio()
{
  ratioWidth = (float) width / (float) canvas.width;
  ratioHeight = (float) height / (float) canvas.height;
 
  if(ratioWidth < ratioHeight)  ratio = ratioWidth;
  else                          ratio = ratioHeight;
}
 
void grid(float pageMargin)
{
  //bounding box for manuscript grid
  canvas.noFill();
  canvas.stroke(360, 100, 100, 0);  //change alpha value to see gridlines
  canvas.strokeWeight(canvas.width/500);
  canvas.rect(pageMargin, pageMargin, canvas.width - (2*pageMargin), canvas.height - (2*pageMargin));
}