Nayeon_Project02_Variable face

nayeon-variable_faces

//Na-yeon Kim
//15-104, B section
//nayeonk1@andrew.cmu.edu
//Project-02_Variable Faces


var pupil = 70;
var eyeS = 100;
var faceW = 300;
var faceH = 240;
var bodyW = 300;
var bodyH = 300;
var feetW = 50;
var feetH = 60;
var wingW = 100;
var wingH = 170;
var r = 166;
var g = 95;
var b = 38;
var dir = 1;
var speed = 0.5;



function setup() {
    createCanvas(480, 640);
    angleMode(DEGREES);
}

function draw() {
    background(250);
    noStroke();

//body
    fill(r, g, b);
    ellipse((width / 2), 420, bodyW, bodyH);

//ears
    push();
    translate(160, 200);
    rotate(30);
    translate(-160, -200);
    arc(150, 220, 180, 130, 0, 180);
    pop();

    push();
    translate(350, 350);
    rotate(-30);
    translate(-350, -350);
    arc(400, 220, 180, 130, 0, 180);
    pop();


//head
    ellipse((width / 2), (height / 2), faceW, faceH);

    fill(235, 207, 174);
    ellipse((width / 2), (height / 2) + 10, (faceW - 50), (faceH - 30));

    fill(207, 145, 74);
    ellipse((width / 2) - 50, (height / 2), eyeS + 40, eyeS + 20);
    ellipse((width / 2) + 50, (height / 2), eyeS + 40, eyeS + 20);

//eyes
    fill(260);
    ellipse((width / 2) - 50, (height / 2), eyeS, eyeS);
    ellipse((width / 2) + 50, (height / 2), eyeS, eyeS);

    fill(r -100, g -100, b -100);
    ellipse((width / 2) - 50, (height / 2), pupil, pupil);
    ellipse((width / 2) + 50, (height / 2), pupil, pupil);

    pupil += dir * speed;
    if (pupil > 80) {
        dir = -dir;
        pupil = 80;
    } else if (pupil < 50) {
        dir = -dir;
        pupil = 50;
    }

//beak
    fill(219, 164, 0);
    ellipse((width / 2), (height / 2) + 40, 40, 70);

//feet
    ellipse((width / 2) - 50, 570, feetW, feetH);
    ellipse((width / 2) + 50, 570, feetW, feetH);

//feather
    fill(235, 207, 174);
    triangle((width / 2) - 30, 450, (width / 2) -20, 470, (width / 2) -10, 450);
    triangle((width / 2) - 10, 450, (width / 2), 470, (width / 2) + 10, 450);
    triangle((width / 2) + 30, 450, (width / 2) +20, 470, (width / 2) +10, 450);


//wings
    fill(r -20, g -20, b -20)
    ellipse((width / 2) - 120, 480, wingW, wingH)
    ellipse((width / 2) + 120, 480, wingW, wingH)

}

function mousePressed() {

    faceW = random(250, 350);
    faceH = random(200, 280);
    eyeS = random(80, 120);
    pupil = random(50, 90);
    bodyW = random(250, 350);
    bodyH = random(250, 350);
    feetW = random(30, 70);
    feetH = random(50, 90);
    wingW = random(70, 130);
    wingH = random(150, 200);
    r = random(130, 190);
    g = random(70, 115);
    b = random(0, 50);

  }

 

I made a draft of a cute owl and painted it with Photoshop, and started to code shapes. Now it became bit odd for ordinary owl, but I like the randomness shapes of this creature!

ICD/ITKE Research Pavillion 2015/2016

Built Pavilion Street View

The institute of Computational Design (ICD) and the institute of Building Structures and Structural Design (ITKE) make Biomimetic Investigation into Shell Structures every year.

It is a holistic process in which the design is based on nature patterns, and the fabrication is made with Robotics arms.

The pavilion is the first of its kind to employ industrial sewing of wood elements on an architectural scale. It is part of a successful series of research pavilions which showcase the potential of computational design, simulation and fabrication processes in architecture.

Based on both the biological principles as well as the material characteristics, the material system was developed as a double-layered structure similar to the secondary growth in sand dollars. The building elements consist of extremely thin wood strips. Instrumentalising the anisotropy of wood, these strips are custom-laminated so that the grain direction and thickness corresponds with the differentiated stiffness required to form parts with varying radii.

Aerial View
A computational tool calculates the necessary plywood veneer layout in order to elastically bend a strip into its desired curvature

 

 

 

 

 

 

 

This project explores robotic sewing to not only join the individually bent plywood strips that form a segment, but also to prevent potential delamination. An industrial robot is employed for both assisting during the assembly and bending of the strips that make up one elements, and then locking the pre-assembled segment in shape by sewing them with a stationary industrial sewing machine. During fabrication the robot first moves the segment through the sewing machine so that the strips are connected.

The computational design tool incorporates all biological principles while following architectural and structural constrains.

This type of project falls into the pure research and innovative morphogenetic design based architecture in which the generation of the geometry follows an Agent Based System in which some growing rules are applied.

 

rsp1-Section B – Looking Outwards-02

Image of an interaction of a person with the leaves of the plant, and the light behind it glowing softly in response to the touch.

 

 

Two people interacting with the Lumifolia artwork.

http://www.digitalarti.com/productions/lumifolia-interactive-garden/

What drew me to this project was the fact that it integrate nature with technology. I was intrigued with the beginning title of “interactive garden”, because it was something that I have not heard of until now. My initial thoughts were that an interactive garden just required people to just be in the space, maybe even walk through it, and experience the greenery that is essentially just static. However, with further research, I found that the trees themselves are actually interactive.

Created by duo Scenocosme for the Parisian Airports Company, this interactive garden “questions sensitivity, artistic, and musical relationships with the plants and the environment” according to its official website. The subtle electrostatic induction from the human body activates a soft light that illuminates the plant itself while its leaves are being caressed. The closer the proximity of the touch, the brighter the lights become.

Below is a video visually documenting the process of this artwork.

I found it a refreshing find because it was an idea that was very unique and unusual. I believe that this artwork can be developed even further and be used for a greater purpose such as public installation that would help to improve life in and around dark and uninteresting occupied spaces.

ctv-Looking_Outwards-02

The typography work (and every piece) by Q Shim is a visual orchestration of parts, wholes, shapes, and textures. He is a professor in the School of Design at CMU, and previously studied around the world. This video, in particular, fascinates me because much of his work brings digital concepts into the physical (non-digital world). He sets parameters, rules, and variables to create his pieces. He then curates those variables to create visually engaging pieces of art and design. Although a lot of his generative art is controlled by computer, in one piece, he creates stamps by hand, then places those stamps along a grid and follows an algorithmic process.

manuelr – project2 – face

sketch

//Manuel Rodriguez
//Section B, 10:30am
//manuelr@andrew.cmu.edu
//project-02


var fatFace = 1;
var lankyFace = 1;
var reyeLength = 10;
var leyeLength = 20;
var openM = 40;
var narrowM = 3;
var posX = 1;
var posY = 1;
var c1=230;
var c2 = 100;
var c3 = 200;

function setup() {
    createCanvas(640, 480);
    background(250);
    
}

function draw() {

    //face shadow
    fill(c1,c2,c3);
    noStroke();
    //strokeWeight(2);
    beginShape();
    curveVertex(125,125*lankyFace);
    curveVertex(123,123);
    curveVertex(80*fatFace,height/2+10);
    curveVertex(90,height-110);
    curveVertex(150,height-140);
    curveVertex(190*fatFace,height/2+10);
    curveVertex(120,120);
    curveVertex(125,125);
    endShape();

    //shape face
    noFill();
    stroke(0);
    strokeWeight(1);
    beginShape();
    curveVertex(120,120*lankyFace);
    curveVertex(120,120*lankyFace);
    curveVertex(110*fatFace,height/2);
    curveVertex(130,height-100);
    curveVertex(140,height-150);
    curveVertex(155*fatFace,height/2);
    curveVertex(120,120);
    curveVertex(120,120*lankyFace);
    endShape();

    //shape face 2
    noFill();
    stroke(100);
    strokeWeight(1);
    beginShape();
    curveVertex(125,125*lankyFace);
    curveVertex(123,123);
    curveVertex(105*fatFace,height/2+10);
    curveVertex(135,height-110);
    curveVertex(138,height-140);
    curveVertex(155*fatFace,height/2+10);
    curveVertex(125,125*lankyFace);
    curveVertex(125,125);
    endShape

    //stroke3
    noFill();
    stroke(220);
    strokeWeight(3);
    beginShape();
    curveVertex(100,100);
    curveVertex(130,130);
    curveVertex(105,height/2+40);
    curveVertex(165,height-100);
    curveVertex(178,height-120);
    curveVertex(155,height/2+9);
    curveVertex(140,125);
    curveVertex(125,115);
    endShape();


    //eyes
    noFill();
    //lefteye
    stroke(0);
    strokeWeight(1);
    ellipse(120*posX,height/2*posY,5,leyeLength);

    //rightteye
    stroke(0);
    strokeWeight(1);
    ellipse(135*posX,height/2*posY,5,reyeLength);

    //eyebags
    stroke(0);
    strokeWeight(1);
    line(110*posX,((height/2)+20)*posY, 115*posX, ((height/2)+20)*posY);
    line(135*posX,((height/2)+10)*posY, 145*posX, ((height/2)+10)*posY);


    //mouth
    stroke(0);
    strokeWeight(1);
    ellipse(127*posX,height/2*posY+70,narrowM,openM);
}

function mousePressed(){
    fatFace = random(-1.2,1.5);
    lankyFace = random(-1.2,1.8);
    c1=random(100,250);
    reyeLength = random(0,100);
    leyeLength = random(0,60);
    openM = random(0,40);
    narrowM = random(0,20);
    posX = random(1.0,1.01);
    posY = random(1.0,1.01);
    c2 = random(100,200);
    c3 = random(100,200);
    clear();
 

}

I wanted to create a different type of face, some sort of simple – abstract art that reminds of a face but don’t respond to any proportions nor reality. Just departing from “hand-drawing” style, I started drawing different line shapes and then added the colour independent from the outlines. Each outline has its own independency and they do not relate to other face features such as eyes, mouth or eye-bags.

ctv-Project-02-someFaces

ctv-project-02

//Ty Van de Zande
//Section B @ 10:30 AM
//ctv@andrew.cmu.edu
//Project-02



//document variables
var ht = 480;
var wd = 640;
var cenY = ht / 2;
var cenX = wd / 2;



//setting up the document
function setup() {
    createCanvas(wd, ht);
    frameRate(1);
}


function draw() {
background(230);    
    
var r = random(400);

//variables for heads
var headW = random(r);
var headH = random(r);

//variables for eyes
var eyePosX = random(headW);
var eyePosY = random(headH);
var eyeSize = random(50);

//variables for brows
var bPosX = random(r);
var bPosY = random(200);
var bTop = bPosY + random(r);
var bLength = random(r);
var bRot = random(r);

//mouth
var mX = random(r);
var mY = random(r);
var mTop = random(r);
var mBottom = random(r);
    
    ellipseMode(CENTER);
    rectMode(CENTER);
    fill(255);
    noStroke();
    
    //draws head
    ellipse(cenX, cenY, headW, headH);
    
    
    //daws eyes
    fill(100)
    noStroke();
    ellipse(cenX - eyePosX, cenY , eyeSize, eyeSize);
    ellipse(cenX + eyePosX, cenY , eyeSize, eyeSize);
    
    
    //draws mouth
    strokeWeight(5);
    stroke(120,0,0);
    beginShape();
    vertex(cenX-mX, cenY+mY);
    bezierVertex(cenX, cenY-mTop, cenX, cenY-mTop, cenX+mX, cenY+mY );
    bezierVertex(cenX+mX, cenY+mY, cenX, cenY-mBottom, cenX-mX, cenY+mY);
    endShape();
    
    
    //draws eyebrows
    
    p1 = {x: cenX-bLength, y: cenY - bPosY}, 
    p2 = {x: cenX-(bLength/2), y: cenY - bTop}, 
    p3 = {x: cenX, y:cenY - bPosY}
    
    p4 = {x: cenX+bLength, y: cenY - bPosY}, 
    p5 = {x: cenX+(bLength/2), y: cenY - bTop}, 
    p6 = {x: cenX, y:cenY - bPosY}
    
    noFill();
    strokeWeight(2);
    stroke(255, 150, 0);
    curve(p1.x, p1.y, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
    curve(p4.x, p4.y, p4.x, p4.y, p5.x, p5.y, p6.x, p6.y);
    

}

For someFaces, I structured each component to act on the center point of the canvas. (Is there a better way to use the center point as a shape starting point?) A random number generator is included in the draw() function, and all of the components generate randos with that local rando as the ceiling. The eyes and head (or sometimes nose) always stays on the centerline of the y-axis. The frameRate() is set to 1 so the image refreshes to show a new face! the eyebrows are pretty crazy.

Project-02-Variable-Face

sketch

//Hanna Jang 
//hannajan@andrew.cmu.edu 
//Section B 
//Project 2: Variable Faces

var BGcircleSize=250;
var BGcircleSize2=280;
var UpperFaceWidth=100; 
var UpperFaceHeight=80; 
var SmileX=300; 
var SmileY=245;
var Smilewidth=15; 
var SmileHeight=15; 
var anglestart=0; 
var LowerFaceWidth=150; 
var LowerFaceHeight=100;
var EyeSize=27;
var PupilSize=7;
var NostrilWidth=5;
var NostrilHeight=15; 
var EarSize=25;
var InnerEarSize=13;

function setup() {
    createCanvas(640, 480);
    background(245, 196, 224);
}

function draw() {
	//Background Circles
	fill(27, 71, 128);
	ellipse(width/2, height/2-45, BGcircleSize2, BGcircleSize2);
	fill(255);
	noStroke();
	ellipse(width/2, height/2-45, BGcircleSize, BGcircleSize);
	
	//ears 
	fill(202, 197, 245);
	var LXear =width/2-UpperFaceWidth*0.40; 
	var RXear =width/2+UpperFaceWidth*0.40; 
	ellipse(LXear, height/2-105, EarSize, EarSize);
	ellipse(RXear, height/2-105, EarSize, EarSize);
	
	//innerears
	fill(157, 141, 187); 
	var LXear =width/2-UpperFaceWidth*0.40; 
	var RXear =width/2+UpperFaceWidth*0.40; 
	ellipse(LXear, height/2-105, InnerEarSize, InnerEarSize);
	ellipse(RXear, height/2-105, InnerEarSize, InnerEarSize);
	
	//UpperFace
	fill(202, 197, 245); 
	ellipse(width/2, height/2-75, UpperFaceWidth, UpperFaceHeight);
	
	//LowerFace 
	fill(202, 197, 245);
	ellipse(width/2, height/2-20, LowerFaceWidth, LowerFaceHeight);

	//eyes 
	var LXeye =width/2-UpperFaceWidth*0.27;
	var RXeye =width/2+UpperFaceWidth*0.27;
	fill(255);
	noStroke();
	ellipse(LXeye, height/2-83, EyeSize, EyeSize);
	ellipse(RXeye, height/2-83, EyeSize, EyeSize);
	
	//pupils
	var LXpupil =width/2-UpperFaceWidth*0.27; 
	var RXpupil =width/2+UpperFaceWidth*0.27;
	fill(0);
	ellipse(LXpupil, height/2-81, PupilSize, PupilSize);
	ellipse(RXpupil, height/2-81, PupilSize, PupilSize);
	
	//nostrils
	var LXnostril =width/2-LowerFaceWidth*0.30;
	var RXnostril =width/2+LowerFaceWidth*0.30;
	ellipse(LXnostril, height/2-30, NostrilWidth, NostrilHeight);
	ellipse(RXnostril, height/2-30, NostrilWidth, NostrilHeight);
	
	//smile 
	fill(198, 73, 59);
	arc(SmileX, SmileY, Smilewidth, SmileHeight, anglestart, PI+QUARTER_PI, OPEN);
	}
	
function mousePressed() {
	//when the user's mouse clicks, these variables are reassigned
	//to random variables within specified ranges 
	
	BGcircleSize2=random(270, 350);
	EyeSize=random(20, 35);
	LowerFaceWidth=random(100, 180);
	LowerFaceHeight=random(90, 120);
	NostrilWidth=random(5, 15);
	NostrilHeight=random(15, 30);
	SmileX=random(280, 330);
	SmileY=random(240, 250);
	EarSize=random(25, 35); 
	
}
	
	

When I first saw the project assignment, I knew I wanted to make my character a hippo, one of my favorite animals. I then sketched up different ideas to make different changes on the hippo’s face when the mouse was clicked. This included variations in eyes, nostrils, ears, and the lower mouth area.

I then experimented with the different variations of sizes and movement of face structures. I was pleased to see that each time the mouse was clicked, a completely new hippo identity appeared, by random variation.

egrady-LookingOutwards-02

http://marcinignac.com/projects/city-icon/

This work of generative art by Marcin Ignac is a virtual city, that features intersecting systems such as traffic jams, water streams, nature enclaves, emergency states and energy sources interacting with each other to form complex patterns. A city is one giant and complex organism, with an abundance of unique patterns forming as a result. The generation of a city is much like the process for which generative art is developed, with the final piece being a rendering based upon the random values of different variables that all add to the final work. In the author’s “about” page he states that he finds inspiration in “structures of biological organisms” and in “patterns emerging from data and complexity of computer algorithms.” His inspiration makes perfect sense in reference to ‘City Icon’, as it represents a biological organism with emerging patterns formed with complex computer algorithms.

I think that this project is particularly interesting because it shows that programming (and generative art) also has the function of creating entire complex systems that very nearly simulate organic life. This project has inspired me to think of programming as a tool for which I can turn my ideas into reality. As for how this work was made, I think it has to do with assigning random variables for different events to happen, like if there is a traffic jam or natural disaster, there is a variable that determines when and where it occurs.

Creator Name: Marcin Ignac
Title of Work: City Icon
Year of Creation: 2012

Matthew Erlebacher LookingOutwards-02

Robert Hodgin/flight404 “Taxi, Taxi!” 2/26/2016

The piece of generative art that I found to be the most interesting was “Taxi, Taxi!” by Robert Hodgin. The main thing that I admire about it is how much the piece has going on at once. The video has a bird’s eye view of a large city and has several glowing dots moving across the street (these presumably represent taxis). I also feel that it provides an interesting and meta perspectives on large cities. From the bird’s eye view you realize how large the city is and how many different people are moving around in it. One critique of the project that I would make is that it keeps cutting between shots. While cuts are good so that the audience doesn’t get bored they use this to often, and it becomes more distracting than anything else.

rsp1-SectionB-Project-02-VariableFace

sketch

//Rachel Park
//Section B @ 10:30 AM
//rsp1@andrew.cmu.edu
//Project-02-VariableFace


function setup() {
    createCanvas(480,640);

}
    //variables for the face
    var eyesize = 20; //a
    var facewidth = 155; //b
    var faceheight = 125; //c
    var earwidth = 30;
    var earheight = 60;
    var antwidth = 20;
    var armswidth = 20;
    var armsheight = 20;
    var armheight = 20;
    var handsheight = 440;
    var handswidth = 155/3;
    var bodywidth = d/2-20;
    var d = 480; //bodysize
    var e = 180; //medium gray fill color
    var f = 138; //dark gray fill color

function draw() {
    background(212,249,246);

    //robot face
    var faceX = width/2
    var faceY = height/3

    rectMode(CENTER);
    noStroke();
    fill(e);
    rect(faceX,faceY,facewidth,faceheight,10);

    fill(220);
    rect(faceX,faceY,facewidth-20,faceheight/2,10);

    //ear things
    var earX = width/3
    var earY = height/3

    noStroke();
    fill(f);
    rect(earX-10,earY,earwidth,earheight,5);

    noStroke();
    fill(f);
    rect(width/2+90,earY,earwidth,earheight,5);

    //antennae
    var antY = height/6

    noStroke();
    fill(f);
    rect(width/2,antY+20,antwidth/2,antwidth*2+10,10);

    noStroke();
    fill(255,41,41);
    ellipse(width/2,antY-10,antwidth,antwidth,10);

    //eyes
    var eyeLX = width/2-38.75;
    var eyeRX = width/2+38.75;
    var eyeY = height/3

    noStroke();
    fill(255);
    ellipse(eyeLX,eyeY,eyesize*2,eyesize*2);
    ellipse(eyeRX,eyeY,eyesize*2,eyesize*2);

    fill(203,35,35);
    ellipse(eyeLX,eyeY,eyesize+10,eyesize+10);
    ellipse(eyeRX,eyeY,eyesize+10,eyesize+10);

    //arms joints
    var armsY = height/2
    fill(f);
    ellipse(width/4,armsY,armswidth,armsheight);
    ellipse(width-120,armsY,armswidth,armsheight);

    //legs & feet
    var legsX = width/2
    var legsY = height-125-35
    var legsYX = height-125+35

    fill(f);
    rect(legsX+60,legsY,40,100);
    rect(legsX-60,legsY,40,100);

    fill(203,35,35);
    rect(legsX+60,legsYX,80,40);
    rect(legsX-60,legsYX,80,40);

    //body
    var bodyX = width/2
    var bodyY = height/2+40
    var bodywidth = d/2-20
    var bodyheight = d/3

    noStroke();
    fill(e);
    rect(bodyX,bodyY,bodywidth,bodyheight,10);

    //arms down

    fill(180);
    rect(width/5+5,armheight+340,21,125,5);
    rect(width-100,armheight+340,21,125,5);

    //hands down
    fill(203,35,35);
    arc(width/4-20,armheight+420,155/3,155/3,3*PI/4,PI/4,PIE);
    arc(width/2+155-15,armheight+420,155/3,155/3,3*PI/4,PI/4,PIE);
}

function mousePressed(){
  armheight = random([10,30]);
  armswidth = random([20,30]);
  eyesize = random(10,20);
  facewidth = random(155,160);
  faceheight = random(125,150);
  earwidth = random(30,55);
  earheight = random(25,60);
  antwidth = random(20,30);
  bodywidth = random([220,210]);
}

For my project, I wanted to make a visual of a small robot because I honestly that it was fun to change up of the possible movements of the figure along with the various facial feature sizes. I had an okay time creating the graphics within the code, but eventually got stuck on the actual functions that were used to make the arms and facial features vary in sizes and locations on the canvas. Overall, I thought that this was a very interesting project and thought that it was a good way to continue to practice the skills that we have learned thus far.

Image of the screenshot of my robot before I could figure out the solution to my function problem. I was able to make the arm shapes themselves, but couldn’t get them to appear separately so that it would make the robot look like its raising and lowering its arms with each click.
Variation on the sizes of the head, antenna, ears, and location of the arms.

 

 

 

 

 

 

 

 

 

My process included a lot of trial and error. Initially, I wanted the arms of the robot to translate upwards, making it look like it was waving its arms like a “hurrah!”, but eventually I came up with a code with slight changes to the image itself, making the robot look like it’s shrugging instead.