sketch
var faceWidth = 350;
var eyeSize = 50;
var irisSize = 30;
var pupilSize = 15;
var glimmerSize = 7;
var angle1 = 0;
var angle2 = 0;
var angle3 = 0;
function setup() {
createCanvas(480, 480);
}
function draw() {
background(0);
noFill();
stroke(255);
strokeWeight(5);
curve(225, 300, 240, 320, 255, 320, 275, 300);
noStroke();
fill('white'); var eyeLX = 175;
ellipse(eyeLX + 10, 200, eyeSize, eyeSize);
fill('white'); var eyeRX = width / 2 + faceWidth * 0.25;
ellipse(eyeRX - 30, 200, eyeSize, eyeSize);
fill(77,47,23); ellipse(eyeLX + 15, 205, irisSize, irisSize);
fill(77,47,23); ellipse(eyeRX - 25, 205, irisSize, irisSize);
fill('black'); ellipse(eyeLX + 20, 210, pupilSize, pupilSize);
fill('black'); ellipse(eyeRX - 20, 210, pupilSize, pupilSize);
fill('white'); ellipse(eyeLX + 25, 212, glimmerSize, glimmerSize);
fill('white'); ellipse(eyeRX - 15, 212, glimmerSize, glimmerSize);
if (mouseX >= 0 & mouseX <= width) {
var ttl1 = makeTurtle(0, 0);
var ttl2 = makeTurtle(0, 0);
var ttl3 = makeTurtle(0, 0);
var ttl4 = makeTurtle(0, 0);
ttl1.setColor('orange');
ttl2.setColor('orange');
ttl3.setColor('orange');
ttl4.setColor(255);
ttl1.setWeight(10);
ttl2.setWeight(10);
ttl3.setWeight(10);
ttl4.setWeight(5);
ttl1.penDown();
ttl2.penDown();
ttl3.penDown();
ttl4.penDown();
push();
translate(220, 380);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
ttl1.left(20);
rotate(radians(angle1));
ttl1.forward(50);
pop();
angle1 = angle1 + 0.5;
push();
translate(155, 125);
rotate(radians(angle3));
ttl2.left(90);
ttl2.forward(75);
ttl2.right(125);
ttl2.forward(75);
pop();
push();
translate(335, 125);
rotate(radians(angle3));
ttl3.left(90);
ttl3.forward(75);
ttl3.left(125);
ttl3.forward(75);
pop();
angle3 = angle3 + 5;
push();
translate(245, 260);
rotate(radians(angle2));
ttl4.forward(50);
ttl4.penUp();
ttl4 = makeTurtle(0, 0);
ttl4.setColor(255);
ttl4.setWeight(5);
ttl4.penDown();
ttl4.left(10);
ttl4.forward(50);
ttl4.penUp();
ttl4 = makeTurtle(0, 0);
ttl4.setColor(255);
ttl4.setWeight(5);
ttl4.penDown();
ttl4.right(10);
ttl4.forward(50);
ttl4.penUp();
ttl4 = makeTurtle(0, 0);
ttl4.setColor(255);
ttl4.setWeight(5);
ttl4.penDown();
ttl4.left(180);
ttl4.forward(50);
ttl4.penUp();
ttl4 = makeTurtle(0, 0);
ttl4.setColor(255);
ttl4.setWeight(5);
ttl4.penDown();
ttl4.left(170);
ttl4.forward(50);
ttl4.penUp();
ttl4 = makeTurtle(0, 0);
ttl4.setColor(255);
ttl4.setWeight(5);
ttl4.penDown();
ttl4.left(190);
ttl4.forward(50);
ttl4.penUp();
pop();
angle2 = angle2 + 5;
} else { var ttl1 = makeTurtle(0, 0);
var ttl2 = makeTurtle(0, 0);
var ttl3 = makeTurtle(0, 0);
var ttl4 = makeTurtle(0, 0);
ttl1.setColor('orange');
ttl2.setColor('orange');
ttl3.setColor('orange');
ttl4.setColor(255);
ttl1.setWeight(10);
ttl2.setWeight(10);
ttl3.setWeight(10);
ttl4.setWeight(5);
ttl1.penDown();
ttl2.penDown();
ttl3.penDown();
ttl4.penDown();
push();
translate(220, 380);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
ttl1.left(20);
ttl1.forward(50);
pop();
push();
translate(155, 125);
ttl2.left(90);
ttl2.forward(75);
ttl2.right(125);
ttl2.forward(75);
pop();
push();
translate(335, 125);
ttl3.left(90);
ttl3.forward(75);
ttl3.left(125);
ttl3.forward(75);
pop();
push();
translate(245, 260);
ttl4.forward(50);
ttl4.penUp();
ttl4 = makeTurtle(0, 0);
ttl4.setColor(255);
ttl4.setWeight(5);
ttl4.penDown();
ttl4.left(10);
ttl4.forward(50);
ttl4.penUp();
ttl4 = makeTurtle(0, 0);
ttl4.setColor(255);
ttl4.setWeight(5);
ttl4.penDown();
ttl4.right(10);
ttl4.forward(50);
ttl4.penUp();
ttl4 = makeTurtle(0, 0);
ttl4.setColor(255);
ttl4.setWeight(5);
ttl4.penDown();
ttl4.left(180);
ttl4.forward(50);
ttl4.penUp();
ttl4 = makeTurtle(0, 0);
ttl4.setColor(255);
ttl4.setWeight(5);
ttl4.penDown();
ttl4.left(170);
ttl4.forward(50);
ttl4.penUp();
ttl4 = makeTurtle(0, 0);
ttl4.setColor(255);
ttl4.setWeight(5);
ttl4.penDown();
ttl4.left(190);
ttl4.forward(50);
ttl4.penUp();
pop();
}
}
function turtleLeft(d) {
this.angle -= d;
}
function turtleRight(d) {
this.angle += d;
}
function turtleForward(p) {
var rad = radians(this.angle);
var newx = this.x + cos(rad) * p;
var newy = this.y + sin(rad) * p;
this.goto(newx, newy);
}
function turtleBack(p) {
this.forward(-p);
}
function turtlePenDown() {
this.penIsDown = true;
}
function turtlePenUp() {
this.penIsDown = false;
}
function turtleGoTo(x, y) {
if (this.penIsDown) {
stroke(this.color);
strokeWeight(this.weight);
line(this.x, this.y, x, y);
}
this.x = x;
this.y = y;
}
function turtleDistTo(x, y) {
return sqrt(sq(this.x - x) + sq(this.y - y));
}
function turtleAngleTo(x, y) {
var absAngle = degrees(atan2(y - this.y, x - this.x));
var angle = ((absAngle - this.angle) + 360) % 360.0;
return angle;
}
function turtleTurnToward(x, y, d) {
var angle = this.angleTo(x, y);
if (angle < 180) {
this.angle += d;
} else {
this.angle -= d;
}
}
function turtleSetColor(c) {
this.color = c;
}
function turtleSetWeight(w) {
this.weight = w;
}
function turtleFace(angle) {
this.angle = angle;
}
function makeTurtle(tx, ty) {
var turtle = {x: tx, y: ty,
angle: 0.0,
penIsDown: true,
color: color(128),
weight: 1,
left: turtleLeft, right: turtleRight,
forward: turtleForward, back: turtleBack,
penDown: turtlePenDown, penUp: turtlePenUp,
goto: turtleGoTo, angleto: turtleAngleTo,
turnToward: turtleTurnToward,
distanceTo: turtleDistTo, angleTo: turtleAngleTo,
setColor: turtleSetColor, setWeight: turtleSetWeight,
face: turtleFace};
return turtle;
}
I decided for this project I would use turtles to create a cat. I found it interesting that with lines I was still able to make circular shapes such as the head of the cat. In addition I decided to mess around with the rotation function to make the cat seems to break apart when the mouse is on the canvas. However, once the mouse is off the campus, the image would return to its original cat face.
