Ice Cream

The first assignment for Printing Code was to design an ice cream cone, using only the ellipse(), rect(), and triangle() functions in Processing, and using them only once each. Looping, of course, was allowed. I decided that the best way to build the cream was to use a recursive function. The function draws one circle, then below it two smaller circles, and then each of those circles has two smaller circles below it. I used a simple triangle to build the cone, and then a set of for loops to make the square pattern on the cone to give a suggestion of waffling. This is the result:
icecream

Here’s the code:

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
//Kim Ash
//Printing Code
//draws an ice cream cone in black and white, using only rect, triangle, and ellipse
 
/*  Properties
_________________________________________________________________ */
 
PGraphics canvas;
int canvas_width = 3508;
int canvas_height = 4961;
 
float ratioWidth = 1;
float ratioHeight = 1;
float ratio = 1;
 
/*  Setup
_________________________________________________________________ */
 
void setup()
{ 
  size(1300, 850);
  background(30);
 
  canvas = createGraphics(canvas_width, canvas_height, P2D);
 
  calculateResizeRatio();
 
  canvas.beginDraw();
    canvas.background(255);
    //canvas.scale(2.0);
    canvas.smooth();
    canvas.stroke(0);
    canvas.strokeWeight(4);
    //cone
    canvas.fill(255);
    canvas.triangle(canvas.width/2 + 75, canvas.height/2, canvas.width/2 - 75, canvas.height/2, canvas.width/2, canvas.height/2 + 350);
    //ice cream
    canvas.fill(0);
    drawCircle(canvas.width/2, canvas.height/2 - 150, 150);
    //cone squares
    canvas.noFill();
    int s = 24; 
    for(int i=0; i<2; i++){
      for(int j=0; j<3; j++){
        canvas.rect(canvas.width/2 + 30 - i*s - j*s, canvas.height/2 + 50 + j*s, s, s);
      }
    }
  canvas.endDraw();
 
  float resizedWidth = (float) canvas.width * ratio;
  float resizedHeight = (float) canvas.height * ratio;
 
  image(canvas, (width / 2) - (resizedWidth / 2), (height / 2) - (resizedHeight / 2), resizedWidth, resizedHeight);
 
  canvas.save("grab.png");
}
 
/*  Calculate resizing
_________________________________________________________________ */
 
void calculateResizeRatio()
{
  ratioWidth = (float) width / (float) canvas.width;
  ratioHeight = (float) height / (float) canvas.height;
 
  if(ratioWidth < ratioHeight)  ratio = ratioWidth;
  else                          ratio = ratioHeight;
}
 
void drawCircle(float x, float y, float d) 
{
  canvas.ellipse(x, y, d, d);
 
  if (d >= 90) {
    drawCircle(x + d/3, y + (d*sqrt(3))/3, 3*d/4);
    drawCircle(x - d/3, y + (d*sqrt(3))/3, 3*d/4);
  }
}