Charmaine Qiu – Project – 07

sketch

//Charmaine Qiu
//charmaiq@andrew.cmu.edu
//section E
//Project - 07 - Composition Curve

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

function draw() {
    //set color to change with movement of mouse
    background(mouseX, mouseY, 100);
    drawHypotrochoid();
    drawAstroid();
}

function drawHypotrochoid() {
  //http://mathworld.wolfram.com/Hypotrochoid.html
  //constraining the mouse action to the canvas
  //map the variables in equation to a fit proportion of the curve
    var x = constrain(mouseX, 0, width);
    var y = constrain(mouseY, 0, height);
    var a = map(x, 0, width, 150, 200);
    var b = map(y, 0, height, 0, 50);
    var h = map(x, 0, width, 0, 50);

  //draw the first curve
    push();
    strokeWeight(10);
    beginShape();
    //rotate so that the beginning of curve does not show
    rotate(radians(120));
    //for loop that makes the shape
    for(var i = 0; i < 300; i += .045){
      var t = map(i, 0, 300, 0, TWO_PI);
      //equation of the curve
      x = (a - b) * cos(t) + h * cos(((a - b) / b) * t);
      y = (a - b) * sin(t) + h * sin(((a - b) / b) * t);
      vertex(x, y);
    }
    endShape(CLOSE);
    pop();

  //drawing the sencond curve
    push();
    //place it at the right bottom corner of canvas
    translate(width, height);
    strokeWeight(10);
    beginShape();
    //for loop that makes the shape
    for(var i = 0; i < 300; i += 0.045){
      var t = map(i, 0, 300, 0, TWO_PI);
      //equation of the curve
      x = (a - b) * cos(t) + h * cos(((a - b) / b) * t);
      y = (a - b) * sin(t) + h * sin(((a - b) / b) * t);
      vertex(x, y);
    }
    endShape(CLOSE);
    pop();
}


function drawAstroid(){
  //http://mathworld.wolfram.com/Astroid.html
    //draw first curve
    push();
    //place curve at center of canvas
    translate(width / 2, height / 2);
    strokeWeight(10);
    //constraining the mouse action to the canvas
    //map the variables in equation to a fit proportion of the curve
    var x = constrain(mouseX, 0, width);
    var y = constrain(mouseY, 0, height);
    var a = map(mouseX, 0, width, 150, 200);
    beginShape();
    //for loop that makes the shape
    for(var i = 0; i < 2 * PI; i += 0.045){
      //rotate with the increment of mouseX
      rotate(radians(x));
      //equation of the curve
      y = a * pow(sin(i), 3);
      x = a * pow(cos(i), 3);
      vertex(x, y);
    }
    endShape();
    pop();

    //draw first curve
    push();
    //place curve at center of canvas
    translate(width / 2, height / 2);
    strokeWeight(10);
    //constraining the mouse action to the canvas
    //map the variables in equation to a fit proportion of the curve
    var x = constrain(mouseX, 0, width);
    var y = constrain(mouseY, 0, height);
    var a = map(mouseX, 0, width, 20, 70);
    beginShape();
    //for loop that makes the shape
    for(var i = 0; i < 2 * PI; i += 0.045){
      //rotate with the increment of mouseY
      rotate(radians(y));
      //equation of the curve
      y = a * pow(sin(i), 3);
      x = a * pow(cos(i), 3);
      vertex(x, y);
    }
    endShape();
    pop();

}

In this project, it was fun to explore the different kinds of curves that can be created with math equations, and it intrigues me how interesting patterns can be generated through math. I took a pop art approach to my project by using bright colors and thick outlines.

The Hypotrochoid curve
The Astroid curve

Charmaine Qiu – Looking Outwards – 07

Facebook Flowers

Image of “facebook flowers”

Stamen design is a visualization design studio that provides for clients across different industries such as artists, architects, and museums. One of their projects that I find particularly interesting is the “Facebook Flowers”.The project took the activities on Facebook of the American actor George Takei and translated it into a digital art piece where a flower grows following the activity of the actor. The team looked at one facebook post specifically, and translated the shares to a flower as each follow-on shares becomes a strand on their own. The pattern created drew relationship to a living organism when the evolving movement is captured to create a video. I find the work of Stamen design very eye opening since it interpreted a technological flow and transformed it to resemble nature. It is fascinating how we as humans are constantly surrounded by the theme of nature even in this ever changing world. 

Find out more on their website: https://stamen.com/work/facebook-flowers/

Charmaine Qiu – LookingOutwards – 06


Image of the artwork “3 Standard Stoppages”

Marcel Duchamp was a French American artist who enjoyed the creation of conceptual art. He created an artwork in 1913-14 called “3 Standard Stoppages”. The artist dropped three meter long threads from one meter above three canvases, and the threads naturally adhered to the canvases with the random curves upon landing. The canvas was later cut along the threads, and the shapes were being preserved. The artwork was intended as a satire against the metric system that Duchamp described as an “intellectual construct rather than a universal absolute”(moma.org). I found it interesting how Duchamp utilized chance operations to distort the unit of length, creating a breakthrough to conventional measuring systems. The artwork is now displayed in MoMA in Manhattan.

Charmaine Qiu – Project-06- Abstract Clock

sketch

/* Charmaine Qiu
  charmaiq@andrew.cmu.edu
  section E
  project 06, Abstract Clock */

function setup() {
    createCanvas(300, 300);
}

function draw() {
    background(255,200,200); 

    // Fetch the current time
    var H = hour();
    var M = minute();
    var S = second();
    //variables that fits the time into certain coundaries
    var poolW = map(M, 0, 59, 70, width);
    var eyesH = map(H, 0, 23, 30, 1);

    noStroke();
    //creating the elements of the girl that does not change over time
    //body
    fill(252, 73, 3);
    ellipse(width / 2, height, 130, 200);
    //face
    fill(255, 238, 227);
    ellipse(width / 2 - 40, height / 2 + 20, 30, 30);
    ellipse(width / 2 + 40, height / 2 + 20, 30, 30);
    ellipse(width / 2, height / 2, 100, 120);
    angleMode(DEGREES);
    //hair
    fill(245, 108, 66);
    arc(width / 2, height / 2, 110, 140, -180, 360);
    ellipse(100, 90, 50, 50);
    ellipse(200, 90, 50, 50);
    //mouth
    arc(width / 2, height / 2 + 50, 40, 50, -180, 360);
    //table
    fill(201, 150, 113);
    rect(0, 250, width, 70);
    //HANGRY
    fill(255, 238, 227);
    //("HANGRY", width / 2 - 23, 140);
    text("When is my FOOD coming?", width / 2 - 70, 40);

    //when it is midnight, "HANGRY" appears on the head
    if (H == 59){
      text("HANGRY", width / 2 - 23, 140);
    }
    //drooling drops that falls down every second
    push();
    translate(160, 200);
    m = floor(millis()) % 1000;
    m = map(m, 0, 1000, 0, 200);
    fill(147, 206, 237);
    ellipse(0, m, 7, 7 + m * 7 / 200);
    pop();
    //the pool gets gets larger as a minute goes by
    fill(147, 206, 237);
    ellipse(width / 2, height, poolW, 50);
    //the eyes becomes smaller as hours in a day pass by
    fill(80);
    ellipse(width / 2 - 20, height / 2 + 15, 10, eyesH);
    ellipse(width / 2 + 20, height / 2 + 15, 10, eyesH);

}

This project is very interesting since I was able to design and compute a graphic that evolves around time. I took the idea of creating a literal clock further by creating a narrative to my work.

Charmaine Qiu – Project 05 – Wall Paper


sketch

Through this project, I learned to organize my code in a more efficient way by creating a new function and calling it in function draw.It was a fun experience to create my own systematic pattern and assigning colors to them.

/*  Charmaine Qiu
    charmaiq@andrew.cmu.edu
    Section E
    Wall Paper */


var spacing = 10;

function setup() {
    createCanvas(600, 600);
}

function draw() {
    background(240, 182, 127);
    //nested loop that loops over rows and columns of pattern
    for(var y = 0; y <= height; y += spacing){
      for(var x = 0; x <= width; x += spacing){
        //call wallPaper that draws the shapes
        wallPaper(x, y);
      }
    }
    noLoop();
}

//create a funtion for the patterns that follow the nested for loop
function wallPaper(x, y){
  //set variable of sides of rectangles that becomes bigger as it goes up canvas
    var rectspc = y / 80
  //lightest teal rectangles
    fill(214, 229, 227);
    noStroke();
    rect(x + spacing / 2, y, rectspc, rectspc);

  //3rd lightest teal rectangles
    fill(104, 216, 214);
    noStroke();
    rect(x, y, rectspc, rectspc);
  //2nd lightest teal rectangles
    fill(156, 234, 239);
    noStroke();
    rect(x + spacing / 2, y +spacing / 2, rectspc, rectspc);
  //darkest teal rectangles
    fill(7, 190, 184);
    noStroke();
    rect(x , y +spacing / 2, rectspc, rectspc);
}

Charmaine Qiu – Looking Outwards – 05


ModelingCafe is a CG company in Tokyo that focuses on 3d modeling and character concept design. They aim to break the current constraints of modeling, and does work in a huge variety of representation methods or genres. The company recently introduced the world’s first computer generated fashion model “Imma” (means “now” in Japanese) who took over magazine covers in Japan.

From a live body and background, Imma’s head are being transposed onto the body, and that is how her images are created. As a hot topic in current Japan, she also has a instagram and Twitter account, where she posts photos and stories almost mimicking a real life human. Though 3d generated fashion models can bring perfection towards the human body, the gap between what is presented in the media and the everyday world would become further apart. This could also damage the modeling industry for real life models. As a designer, I think it is important for the current world to realize the possibility of designs that could people to comply to the innovative world.

Charmaine Qiu – Project 04 – String Art


sketch

It was challenging to figure out how to efficiently create the lines on canvas. I tried to incorporate an interactive aspect towards my project, and it was fun to explore with. I now have a better understanding of how digital line art is created and the thought process behind it.

/* Charmaine Qiu
   charmaiq@andrew.cmu.edu
   Section E
   Project 04 String Art*/
var spacing = 10;
var gcolor = 34;
var bcolor  = 140;
function setup() {
    createCanvas(400, 300);
}

function draw() {
  //set background color and initial stroke color of center piece
    background(0, 13, 255);
    stroke(255, gcolor, bcolor);
  //the center piece that follows the mouse
    for(var i = 0; i < 30; i++){
  //changes color when moving between left and right side of canvas
      if(mouseX > width / 3){
        stroke(150, gcolor, bcolor);
      }
      if(mouseX > 2*width / 3){
        stroke(50, gcolor, bcolor);
      }
  //the center piece drawn with a spacing variable that sets distance between two lines
      line(mouseX, i * spacing, width, height / 2);
      line(0, height / 2, mouseX, i * spacing);
    }
  //line art that surrounds the opposite corners of canvas
    for(var i = 0; i < width; i += 10){
  //yellow lines
      stroke(218, 245, 66);
      line(i, 0, width, i / 2);
      line(0, i, i /2, width);
  //orange lines
      stroke(255, 162, 0);
      line(width, height - i, width - i, 0);
      line(0, i / 2, i, height);
    }


}

Charmaine Qiu-LookingOutwards 04

The Prelude in ACGT is a project created by Pierry Jaquillard where he used his own DNA to generate music by utilizing the chromosomes 1 to 22 and XY. Believing that DNA is the core structure of nature, Pierry wanted to experiment with his own personal code.

The project was created through JavaScript, and he generated midi signals that was passed into Ableton Live, a music sequencer, to play the sounds. The project was displayed on 4 ipads and a phone, where the phone is used to change tempo and arrangement. I found this project really interesting since it celebrated the nature of human beings and creating art through biology could become a direction of art in the future. 

A video explaining the Prelude in ACGT project

Charmaine Qiu – Project 03 – Dynamic Drawing


sketch

Exploring the various ways that shapes in p5js can change with the movement of the cursor was really interesting! It was also interesting to incorporating text in different languages into my code.

/* Charmaine Qiu
   Section E
   charmaiq@andrew.cmu.edu
   Project-03-DynamicDrawing */


var angle = 0
var b = 0


function setup() {
    createCanvas(400, 400);
}

function draw() {
//square that follows the cursor
    fill(b);
    b = random (0, 255);
    strokeWeight(0);
    rectMode(CENTER);
    push();
    translate(mouseX, mouseY);
    background(0);
    rotate(radians(angle));
    rect(0, 0, 50, 50);
    pop();
    angle += 5;

//rectangle outlines in the center
    noFill();
    stroke(255);
    strokeWeight(5);
    push();
    translate(width / 2, height / 2);
    rect(0, 0, mouseX, mouseY);
    pop();

    stroke(b);
    strokeWeight(1);
    rect(width * 0.5, height * 0.5, mouseY, mouseX);

//dancing lines in the center
    stroke(255);
    strokeWeight(1);
    line(width / 2 - 40, height / 2, width / 2 - 40, mouseY + 50);
    line(width / 2 - 30, height / 2, width / 2 - 30, mouseY);
    line(width / 2 - 20, height / 2, width / 2 - 20, mouseY - 20);
    line(width / 2 - 10, height / 2, width / 2 - 10, mouseY + 40);
    line(width / 2, height / 2, width / 2, mouseY);
    line(width / 2 + 10, height / 2, width / 2 + 10, mouseY + 60);
    line(width / 2 + 20, height / 2, width / 2 + 20, mouseY + 10);
    line(width / 2 + 30, height / 2, width / 2 + 30, mouseY);
    line(width / 2 + 40, height / 2, width / 2 + 40, mouseY - 30);

//When the mouse move to the left side of the canvas
    if (mouseX <= width / 2){
      push();
      translate(mouseX - 50, mouseY - 50);
      rotate(radians(angle));
      rectMode(CORNER);
      rect(20, 20, 20, 20);
      pop();
      angle = angle + 0.5;

      push();
      translate(mouseX + 50, mouseY + 50);
      rotate(radians(angle));
      rect(0, 0, 10, 10);
      pop();
      angle = angle - 0.5

      //text
      textSize(15);
      text('WooHooo!!!', 20, 90);
      textSize(30);
      text('哦耶!', 280, 180);

    } else { //When the mouse move to the right side of the canvas
      fill(0);
      strokeWeight();
      push();
      translate(mouseX, mouseY);
      rotate(radians(angle));
      rectMode(CENTER);
      rect(0, 0, 30, 30);
      pop();
      angle = angle + 5

      //text
      textSize(20);
      fill(255);
      text('야호!', 280, 50);
      textSize(25);
      text('ヤッホ〜ー', 70, 350);

    }


}

Charmaine Qiu – LookingOutwards – 03

MIT’s computer fabrication group tackles problems in digital manufacturing and computer graphics. The group develops new technology that brings changes to people’s lifestyles. One of their recent projects that intrigues me is the computer-aided knitting technology. “InverseKnit” is a system where automating knitted garments is made possible. It was created by a PhD student Alexandre Kaspar and his colleges. With a photo of knitted patterns, the system is able to translate the information into instructions to the machine, which makes the clothing following the instructions. This technology allows designers to create and actualize designs efficiently. 

Examples of products made by the lab through the 3D knitting system

Technologies like 3D knitting that visualizes the designer’s ideas efficiently can greatly assist the productivity of the design process, and i think that it would have greater potential in the future.

Here is a link for more information: https://www.csail.mit.edu/news/computer-aided-knitting