Reference picture:
The sketch: I have divided the paper into rectangle pieces to map the approximate position of the sketch & outlined the shapes. Given that the chosen picture is already quite geometrical I did not need to do much geometrization myself.
I have utilized quite a lot of shapes in my code, including rect(), circle(), line(), vertex()-based shapes and even sinus function to create the wavy part of the bottom sign.
- Did you prefer exploratory programming, or using the reference? Why? Could you imagine a situation where you would use the other technique?
I was using both! I would usually get some guidelines from the reference website and then continue on changing the parameters of the function myself. I believe this method works best for me as it provides a certain head-start when utilizing new functions.
- In which ways (if any) was drawing on a piece of paper (as we did in our exercise) easier than writing the program?
Well, I didn’t need to think about the positions of the shapes, nor the complexity or color:) so it was definitely easier.
- In which ways (if any) is writing the program easier than drawing on the piece of paper?
I wouldn’t say it is easier but it was way more interesting cause I had color and also the possibility to understand how, for example, the vertex() function works, as well as how I can utilize the sin() when creating the wavy things.
one of the most interesting bits of text would be the wavy part:
noFill(); beginShape(); for (let y = initialY; y <= initialY + 190; y += 1) { let x = map(sin(y * 0.2), -1, 1, initialX + 5, initialX - 5); vertex(x, y); } endShape(); let initialX1 = width / 2 - sizeOfSign / 2 + 81; let initialY1 = height / 2 + 70 - 10; beginShape(); for (let y = initialY1; y <= initialY1 + 190; y += 1) { let x = map(sin(y * 0.2), -1, 1, initialX1 + 5, initialX1 - 5); vertex(x, y); } endShape();
the shape of the right one (with the lines and stuff):
fill(36, 39, 223); rect(width / 2 + sizeOfSign, height / 2 - 100, sizeOfSign, 200); circle(width / 2 + sizeOfSign + 50, height / 2 - 100, 100); circle(width / 2 + sizeOfSign + 50, height / 2 + 100, 100); stroke(128, 244, 255); circle(width / 2 + sizeOfSign + 50, height / 2 - 100, 90); circle(width / 2 + sizeOfSign + 50, height / 2 + 100, 90); rect(width / 2 + sizeOfSign + 5, height / 2 - 100, sizeOfSign - 10, 200); stroke(252, 194, 252); //upper part line( width / 2 + sizeOfSign + 50, height / 2 - 100, width / 2 + sizeOfSign + 50 - 40, height / 2 - 100 - 20 ); line( width / 2 + sizeOfSign + 50, height / 2 - 100, width / 2 + sizeOfSign + 50 - 25, height / 2 - 100 - 37 ); line( width / 2 + sizeOfSign + 50, height / 2 - 100, width / 2 + sizeOfSign + 50, height / 2 - 100 - 45 ); line( width / 2 + sizeOfSign + 50, height / 2 - 100, width / 2 + sizeOfSign + 50 + 25, height / 2 - 100 - 37 ); line( width / 2 + sizeOfSign + 50, height / 2 - 100, width / 2 + sizeOfSign + 50 + 40, height / 2 - 100 - 20 ); //lower part line( width / 2 + sizeOfSign + 50, height / 2 + 100, width / 2 + sizeOfSign + 50 - 40, height / 2 + 100 + 20 ); line( width / 2 + sizeOfSign + 50, height / 2 + 100, width / 2 + sizeOfSign + 50 - 25, height / 2 + 100 + 37 ); line( width / 2 + sizeOfSign + 50, height / 2 + 100, width / 2 + sizeOfSign + 50, height / 2 + 100 + 45 ); line( width / 2 + sizeOfSign + 50, height / 2 + 100, width / 2 + sizeOfSign + 50 + 25, height / 2 + 100 + 37 ); line( width / 2 + sizeOfSign + 50, height / 2 + 100, width / 2 + sizeOfSign + 50 + 40, height / 2 + 100 + 20 );
and the shape of the left one:
fill(200, 44, 0); rect(width / 2 - sizeOfSign * 2, height / 2 - 100, sizeOfSign, 200); circle(width / 2 - sizeOfSign * 1.5, height / 2 - 100 + 5, sizeOfSign - 15); circle(width / 2 - sizeOfSign * 1.5, height / 2 + 100 - 5, sizeOfSign - 15); strokeWeight(2); stroke(255, 255, 0); rect( width / 2 - sizeOfSign * 2 + 5, height / 2 - 100 + 5, sizeOfSign - 10, 190 ); circle(width / 2 - sizeOfSign * 1.5, height / 2 - 100 + 5, sizeOfSign - 25); circle(width / 2 - sizeOfSign * 1.5, height / 2 + 100 - 5, sizeOfSign - 25); noStroke(); fill(200, 44, 0); rect( width / 2 - sizeOfSign * 2 + 11, height / 2 - 100 + 5, sizeOfSign - 20, 190 ); strokeWeight(2); stroke(255, 205, 243); fill(152, 28, 186); rect( width / 2 - sizeOfSign * 2 + 12.5, height / 2 - 90, sizeOfSign - 25, 180 ); noStroke(); fill(200, 44, 0); circle(width / 2 - sizeOfSign * 1.5, height / 2 - 100 + 10, sizeOfSign - 35); circle(width / 2 - sizeOfSign * 1.5, height / 2 - 100 + 100, sizeOfSign - 35); circle(width / 2 - sizeOfSign * 1.5, height / 2 - 100 + 190, sizeOfSign - 35);
I am pretty satisfied with how this experiment turned out. Even though I spent unreasonable time working on some of the parts, I believe that the outcome was worth it! You can see the screenshots and the code below:) P.S. I could not decide which background color works here) even tried blue, green, red, grey, etc. decided to attach black and white here:)
function setup() { createCanvas(600, 600); background(255); } let sizeOfSign = 100; function theTopOne() { fill(70, 50, 65); noStroke(); rect(width / 2 - sizeOfSign / 2, height / 6, sizeOfSign, 200); //the outline strokeWeight(2); stroke(0, 255, 218); rect(width / 2 - sizeOfSign / 2 + 5, height / 6 + 5, sizeOfSign - 10, 190); noStroke(); let s = "红包莫牢牢"; textSize(30); fill(0, 255, 218); text(s[0], width / 2 - sizeOfSign / 2 + 35, height / 6 + 20, 100, 200); text(s[1], width / 2 - sizeOfSign / 2 + 35, height / 6 + 52, 100, 200); text(s[2], width / 2 - sizeOfSign / 2 + 35, height / 6 + 84, 100, 200); text(s[3], width / 2 - sizeOfSign / 2 + 35, height / 6 + 116, 100, 200); text(s[4], width / 2 - sizeOfSign / 2 + 35, height / 6 + 148, 100, 200); } function theLeftOne() { fill(200, 44, 0); rect(width / 2 - sizeOfSign * 2, height / 2 - 100, sizeOfSign, 200); circle(width / 2 - sizeOfSign * 1.5, height / 2 - 100 + 5, sizeOfSign - 15); circle(width / 2 - sizeOfSign * 1.5, height / 2 + 100 - 5, sizeOfSign - 15); strokeWeight(2); stroke(255, 255, 0); rect( width / 2 - sizeOfSign * 2 + 5, height / 2 - 100 + 5, sizeOfSign - 10, 190 ); circle(width / 2 - sizeOfSign * 1.5, height / 2 - 100 + 5, sizeOfSign - 25); circle(width / 2 - sizeOfSign * 1.5, height / 2 + 100 - 5, sizeOfSign - 25); noStroke(); fill(200, 44, 0); rect( width / 2 - sizeOfSign * 2 + 11, height / 2 - 100 + 5, sizeOfSign - 20, 190 ); strokeWeight(2); stroke(255, 205, 243); fill(152, 28, 186); rect( width / 2 - sizeOfSign * 2 + 12.5, height / 2 - 90, sizeOfSign - 25, 180 ); noStroke(); fill(200, 44, 0); circle(width / 2 - sizeOfSign * 1.5, height / 2 - 100 + 10, sizeOfSign - 35); circle(width / 2 - sizeOfSign * 1.5, height / 2 - 100 + 100, sizeOfSign - 35); circle(width / 2 - sizeOfSign * 1.5, height / 2 - 100 + 190, sizeOfSign - 35); let s = "扎台型"; fill(255, 255, 0); text(s[0], width / 2 - sizeOfSign * 1.5 - 15, height / 2 - 100 + 17.5); text(s[1], width / 2 - sizeOfSign * 1.5 - 15, height / 2 - 100 + 110); text(s[2], width / 2 - sizeOfSign * 1.5 - 15, height / 2 - 100 + 202.5); } function theRightOne() { fill(36, 39, 223); rect(width / 2 + sizeOfSign, height / 2 - 100, sizeOfSign, 200); circle(width / 2 + sizeOfSign + 50, height / 2 - 100, 100); circle(width / 2 + sizeOfSign + 50, height / 2 + 100, 100); stroke(128, 244, 255); circle(width / 2 + sizeOfSign + 50, height / 2 - 100, 90); circle(width / 2 + sizeOfSign + 50, height / 2 + 100, 90); rect(width / 2 + sizeOfSign + 5, height / 2 - 100, sizeOfSign - 10, 200); stroke(252, 194, 252); //upper part line( width / 2 + sizeOfSign + 50, height / 2 - 100, width / 2 + sizeOfSign + 50 - 40, height / 2 - 100 - 20 ); line( width / 2 + sizeOfSign + 50, height / 2 - 100, width / 2 + sizeOfSign + 50 - 25, height / 2 - 100 - 37 ); line( width / 2 + sizeOfSign + 50, height / 2 - 100, width / 2 + sizeOfSign + 50, height / 2 - 100 - 45 ); line( width / 2 + sizeOfSign + 50, height / 2 - 100, width / 2 + sizeOfSign + 50 + 25, height / 2 - 100 - 37 ); line( width / 2 + sizeOfSign + 50, height / 2 - 100, width / 2 + sizeOfSign + 50 + 40, height / 2 - 100 - 20 ); //lower part line( width / 2 + sizeOfSign + 50, height / 2 + 100, width / 2 + sizeOfSign + 50 - 40, height / 2 + 100 + 20 ); line( width / 2 + sizeOfSign + 50, height / 2 + 100, width / 2 + sizeOfSign + 50 - 25, height / 2 + 100 + 37 ); line( width / 2 + sizeOfSign + 50, height / 2 + 100, width / 2 + sizeOfSign + 50, height / 2 + 100 + 45 ); line( width / 2 + sizeOfSign + 50, height / 2 + 100, width / 2 + sizeOfSign + 50 + 25, height / 2 + 100 + 37 ); line( width / 2 + sizeOfSign + 50, height / 2 + 100, width / 2 + sizeOfSign + 50 + 40, height / 2 + 100 + 20 ); let s = "豁翎子"; noStroke(); fill(252, 194, 252); textSize(40); text(s[0], width / 2 + sizeOfSign + 30, height / 2 - 100 + 25, 100, 200); text(s[1], width / 2 + sizeOfSign + 30, height / 2 - 100 + 80, 100, 200); text(s[2], width / 2 + sizeOfSign + 30, height / 2 - 100 + 135, 100, 200); } function theBottomOne() { fill(76, 55, 82); stroke(76, 55, 82); beginShape(); vertex(width / 2 - sizeOfSign / 2, height / 2 + 70); vertex(width / 2 - sizeOfSign / 2 + 30, height / 2 + 45); vertex(width / 2 - sizeOfSign / 2 + 70, height / 2 + 45); vertex(width / 2 - sizeOfSign / 2 + 100, height / 2 + 70); vertex(width / 2 - sizeOfSign / 2 + 100, height / 2 + 240); vertex(width / 2 - sizeOfSign / 2 + 70, height / 2 + 265); vertex(width / 2 - sizeOfSign / 2 + 30, height / 2 + 265); vertex(width / 2 - sizeOfSign / 2, height / 2 + 240); endShape(); stroke(254, 254, 70); strokeWeight(2); beginShape(); vertex(width / 2 - sizeOfSign / 2 + 5, height / 2 + 70 + 2.5); vertex(width / 2 - sizeOfSign / 2 + 30, height / 2 + 45 + 5); vertex(width / 2 - sizeOfSign / 2 + 70, height / 2 + 45 + 5); vertex(width / 2 - sizeOfSign / 2 + 100 - 5, height / 2 + 70 + 2.5); vertex(width / 2 - sizeOfSign / 2 + 100 - 5, height / 2 + 240 - 2.5); vertex(width / 2 - sizeOfSign / 2 + 70, height / 2 + 265 - 5); vertex(width / 2 - sizeOfSign / 2 + 30, height / 2 + 265 - 5); vertex(width / 2 - sizeOfSign / 2 + 5, height / 2 + 240 - 2.5); vertex(width / 2 - sizeOfSign / 2 + 5, height / 2 + 70 + 2.5); endShape(); // rect(width/2-sizeOfSign/2, height/2+50, sizeOfSign, 200); let initialX = width / 2 - sizeOfSign / 2 + 20; let initialY = height / 2 + 70 - 10; point(initialX, initialY); noFill(); beginShape(); for (let y = initialY; y <= initialY + 190; y += 1) { let x = map(sin(y * 0.2), -1, 1, initialX + 5, initialX - 5); vertex(x, y); } endShape(); let initialX1 = width / 2 - sizeOfSign / 2 + 81; let initialY1 = height / 2 + 70 - 10; beginShape(); for (let y = initialY1; y <= initialY1 + 190; y += 1) { let x = map(sin(y * 0.2), -1, 1, initialX1 + 5, initialX1 - 5); vertex(x, y); } endShape(); let s = "神兜兜"; noStroke(); fill(254, 254, 70); text(s[0], initialX1 - 50, initialY1 + 20, 100, 200); text(s[1], initialX1 - 50, initialY1 + 70, 100, 200); text(s[1], initialX1 - 50, initialY1 + 120, 100, 200); } function draw() { theTopOne(); theLeftOne(); theRightOne(); theBottomOne(); }