selinal-Project-07

sketch

//Selina Lee
//Section C
//selinal@andrew.cmu.edu
//Project-07

var nPoints = 70; //amount of elements
var Cissoid = 0; //http://mathworld.wolfram.com/CissoidofDiocles.html
var Conchoid = 0; //http://mathworld.wolfram.com/ConchoidofdeSluze.html

var titles = ["1. Cissoid", "2. Conchoid"];
var curveMode = Cissoid;

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

function draw() {
	background(255, 160, 60);  //orange background

	translate(240, 240); //place objects or focus on middle
	drawConchoidCurve(); //draw green and pink curves in back
	drawCissoidCurve(); //circles and blue lines in front
     
	
}

function drawCissoidCurve() {
	var x; //defining normal plane variables
	var y;

	var a1 = mouseX/20; //containing area of mouse interaction based on size or stretch of curves
	var a2 = mouseY/70;

	stroke(130, 130, 255); //blue lines
	strokeWeight(.5);
	beginShape(); //creating visuals based on Cissoid of Diocles curve
	for (var i = 0; i < nPoints; i++) {
		var t = map(i, 0, nPoints, 0, TWO_PI); //making i obtain to angle which is t 

		x = (10 * a1 * sq(t)) / (1 + sq(t)); //formulas for x and y of curve
		// 10 for x and 20 for y were used as constant values based on the composition attained in the index
		y = (20 * a2 * sq(t) * t) / (1 + sq(t));

		
		fill(250, 240, 220); //off white filling

		vertex(x, y); //draws single curve in normal direction for x and y on an index
		vertex(-x, y); //after adding this vertex, i noticed a greater variation and extension of the curves and lines so I continued this process
		vertex(x, -y);
		vertex(-x, -y);
		

		for(var ext = 0; ext < x; ext++) { //creating visuals deviating away from the lines but controlled by the same curve

			push(); //contain colors in this for loop not the colors also belonging to the blue line series
			fill(150, 255, 200); //green fill
			ellipse(ext * 10, -y * 5, 10, 10);  //greenish/aqua series of ellipses on top right and bottom left
			ellipse(-ext * 10, y * 5, 10, 10);

			fill(255, 120, 160); //reddish fill
			ellipse(ext * 15, -y * 19, 20, 20); //ellipses accompanying the ones in code written above
			ellipse(-ext * 15, y * 19, 20, 20);
	        pop();
		}

	}
	endShape(CLOSE);
}

function drawConchoidCurve() {
	var x2; //defining second x and y plane variables
	var y2;

	var b1 = mouseX; //containment of lines based on mouse interaction
	var b2 = mouseY;

	stroke(255, 100, 255); //magenta strokes
	strokeWeight(2); //thicker stroke
	beginShape();
	for (var j = 0; j < nPoints; j++) { 
		var ang = map(j, 0, nPoints, 0, TWO_PI); //setting the angle value same as var t in the first for loop for the Cissoid of Diocles curve

		x2 = ((1 / cos(ang)) + b1 * cos(ang)) * cos(ang); //formulas for Conchoid de Sluze curve	
        y2 = ((1 / cos(ang)) + b2 * cos(ang)) * sin(ang);

        fill(200, 255, 50); //lime green fill

        vertex(x2, y2); // this initial curve also only gave be one shape at first which looked like a flower petal from the center of the frame
        //this shape seemed more centered rather than side oriented like the Cissoid function so I experimented with on other vertex implementation focusing on the center of x
        vertex(-x2, y2); //created an inkblot array type of line series, more angular than round
        

        push(); // so that other functions not used before like noFill only affect these two vertex
        noFill(); //no fill so there is no overwhelming green
        vertex(x2 * 10, y2 * 10); //creating wider and bigger curve series of the same physical orientation and interaction
        vertex(-x2 * 10, y2 * 10);
        pop();
    }
    endShape(CLOSE);


}

selinal-Looking-Outwards-07

Personal Knowledge Database by Moebio Labs (Santiago Ortiz)

http://intuitionanalytics.com/other/knowledgeDatabase/

Moebio Labs is a collaborative team of engineers, analysts, programmers, etc. which has swept through and encountered millions of pages on the internet. While they make most of their data visualizations about a specific topic or theme, their project Personal Knowledge Database acts as an archive for the research they have done throughout the ten years since they started making data visualizations. I admire how they use of old, “unseen” material and incorporate it as a main thematic element in another one of their projects. I think there is a significance in the metaphorical translation of the project’s concept to a visual, and the interactive and technical aspects are extremely impressive. One observation I have of the algorithm used is the separation of certain links/projects into nodes within other nodes, perhaps to indicate time period and area of research.

Image result for personal knowledge database santiagoImage result for personal knowledge database santiago

selinal-Project-06

sketch

//Selina Lee
//Section C
//selinal@andrew.cmu.edu
//Project-06

var prevSec;
var millisRolloverTime;
var centX = 300; //center coordinates
var centY = 300;
var numcirc = 12; // number of circles to draw 
var distanceS = 250; //distance away from center with second pi clock 
var distanceM = 225; //distance away from center with minute pi clock 
var distanceH = 175; //distance away from center with hour pi clock 
var angle = 0;  //start angle for circle rotation

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

    millisRolloverTime = 0;
}

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

	// Fetch the current time
    var H = hour();
    var M = minute();
    var S = second();
    
    // Reckon the current millisecond, 
    // particularly if the second has rolled over.
    // Note that this is more correct than using millis()%1000;
    if (prevSec != S) {
        millisRolloverTime = millis();
    }
    prevSec = S;
    var mils = floor(millis() - millisRolloverTime);
    
    var hourArcAngle   = map(H, 0, 23, 0, 360); //angles away from 0 or 12 o'clock
    var minuteArcAngle = map(M, 0, 59, 0, 360);
    
    // Make a bar which *smoothly* interpolates across 1 minute.
    // We calculate a version that goes from 0...60, 
    // but with a fractional remainder:
    var secondsWithFraction   = S + (mils / 1000.0);
    var secondsWithNoFraction = S;
    //var secondBarWidthChunky  = map(secondsWithNoFraction, 0, 60, 0, width);
    var secondArcAngleSmooth  = map(secondsWithFraction,   0, 60, 0, width);
    
    var strike = radians(270); //so that arcs start at 12:00 placement

    var alphaincS = map(S, 0, 59, 0, 155); //increase transparency from full circle
    var alphaincM = map(M, 0, 59, 0, 105); 
    var alphaincH = map(H, 0, 23, 0, 105);

    noStroke();
    fill(255, 230, 130, 100 + alphaincS);
    arc(centX, centY, 500, 500, strike, radians(secondArcAngleSmooth) + strike); //yelllow outside circle for seconds

    fill(255, 180, 130, 150 + alphaincM);
    arc(centX, centY, 450, 450, strike, radians(minuteArcAngle) + strike); //orange circle for minutes

    fill(255, 150, 130, 150 + alphaincH);
    arc(centX, centY, 350, 350, strike, radians(hourArcAngle) + strike); //red circle for hours by 24

    var angleObjectS = 360/numcirc; //divides circles evenly on outside
	for (var i = 0; i < numcirc; i++) //for loops for making circles revolve around center point
	{
		var posX = centX + distanceS *cos( radians(angleObjectS*i + angle) );
	var posY = centY + distanceS *sin( radians(angleObjectS*i + angle) );
	fill(255, 0, 0, 50);
	ellipse(posX, posY, 30, 30);
	}

	var angleObjectM = 360/numcirc;
	for (var i = 0; i < numcirc; i++)
	{
	var posX = centX + distanceM *cos( radians(angleObjectM*i + angle) );
	var posY = centY + distanceM *sin( radians(angleObjectM*i + angle) );
	fill(255, 150, 0, 50);
	ellipse(posX, posY, 30, 30);
}
	var angleObjectH = 360/numcirc;
	for (var i = 0; i < numcirc; i++)
	{
	var posX = centX + distanceH *cos( radians(angleObjectH*i + angle) );
	var posY = centY + distanceH *sin( radians(angleObjectH*i + angle) );
	fill(255, 255, 0, 50);
	ellipse(posX, posY, 30, 30);
}
}
    

selinal-Looking-Outwards-06

Pound Art  Comics by John Pound

http://www.poundart.com/art/randcomix/about.html

John Pound uses his self-developed software to create comics or 2D works derived off of randomization of visual elements. His development of his practice and view of his programs is interesting in that he uses programs “not as a passive tool, like an airbrush, but as an active partner in making creative decisions” (Pound). I appreciate the abstraction and subjectivity of computing in this manner. While the random visuals produced look as if they were just performed by a random function in a 2D coordinate plane, Pound keeps the fabrication of his code and software to himself but says it is coded in PostScript. The visuals look as if there is a constant and a constraint of variables with a simple random variable to add variation. That way, there is a consistency in characters/characteristics but a slight change in illustration that adds presence and personality.

Image result for pound art

Image result for pound art

Image result for john pound comic

 

selinal-Project-05

sketch

//Selina Lee
//Section C
//selinal@andrew.cmu.edu
//Project-05

function setup() {
    createCanvas(480, 360);
    background(255, 255, 120); //light yellow background

    for(var row = 0; row < 60; row++) { //creating grid of 60x80 for design
    	for(var col = 0; col < 80; col++) { 
    		stroke(230, 230, 150, 40); //light beige stripes
    		strokeWeight(3);
    		line(col*6 + 3, 0, col*6 + 3, width); //spacing the stripes 6 units apart and centering the space by three units from the origin

    		push(); //start of a rotation
    		noStroke(); 
    		fill(255, 200, 150, 150); //orange hue
    		rotate(radians(32)); //rotate the shape by 32 degrees
    		ellipse(row * 20 + 12, col * 40 - 260, 7, 3); //diagonal rows of ellipses more in the horizontal direction that are 20 units apart
    		rotate(radians(70)); //rotate shape by 70 degrees so that it is in a more upward direction
    		ellipse(row * 20 - 80, col * 40 - 800, 6, 2); //shifting the ellipse lines up and over to the right more
    		pop(); //confining the rotation
    	}
    }

    for(var petalx = 0; petalx < 4; petalx++) { //creating flowers with 4 columns
    	for(var petaly = 0; petaly < 3; petaly++) { //flowers in 3 rows
    		noFill();
    		stroke(180, 230, 100); //green flower stems
    		strokeWeight(3); //stroke weight of 3
    		beginShape(); 
    		curveVertex(petalx * 120 + 75, petaly * 120 + 50); //flower stem starting at center point of white ellipse (see below)
    		curveVertex(petalx * 120 + 75, petaly * 120 + 50);
    		curveVertex(petalx * 120 + 65, petaly * 120 + 70); //midpoints of stem where curve shape happens
    		curveVertex(petalx * 120 + 65, petaly * 120 + 90); //other mid point
    		curveVertex(petalx * 120 + 70, petaly * 120 + 110); //finishing point below main shape of flower
    		curveVertex(petalx * 120 + 70, petaly * 120 + 110);
    		endShape();

    		noStroke();

    		fill(255, 255, 250); //main off-white flower center
    		ellipse(petalx * 120 + 75, petaly * 120 + 50, 10, 10); //centerpoint

    		fill(200, 100, 255, 130); //indigo color of flower with 130 transparency to fit in better with opposing color of yellow
    		ellipse(petalx * 120 + 65, petaly * 120 + 45, 20, 5); //three horizontal ellipse petals 
    		ellipse(petalx * 120 + 60, petaly * 120 + 50, 20, 5);
    		ellipse(petalx * 120 + 65, petaly * 120 + 55, 20, 5);

    		ellipse(petalx * 120 + 80, petaly * 120 + 40, 5, 20); // three vertical ellipse petals to show series of abstraction in flower
    		ellipse(petalx * 120 + 85, petaly * 120 + 50, 5, 20);
    		ellipse(petalx * 120 + 80, petaly * 120 + 60, 5, 20);
    	
    	}
    }

    noLoop();

}

function draw() {
}

selinal-Looking-Outwards-05

Alien Bonsais by Chaotic Atmospheres

http://chaoticatmospheres.com/alien-bonsais

What I admire about this project are the organic structures, shapes, etc. created to as an inorganic iteration of a bonsai tree. In a way, Chaotic Atmospheres is creating a sculpture on the bonsai tree digitally which would be too difficult to manifest physically on a real, living organism. Thus, that makes the shapes created in relation to the tree a true “alien” visual. What I know of the algorithms used for this project is that the artist used a 3D software called Substance Designers which he embedded onto his own digital trees to create the alien texturing of his bonsais. His artistic sensibilities were utilized in the organization of constructing the digital trees and altering the tones, color, shapes, sizing, movement, etc. of the product so that the image was cohesive and aesthetically intriguing.

Image result for alien bonsais

Image result for alien bonsais

selinal-Project-String Art-04

My process for creating these visuals was first to cement a series of curves in a “random” line and balance that series with other curves series based on the location and spread of the first.

sketch

//Selina Lee
//Section C
//selinal@andrew.cmu.edu
//Project-04

function setup() {
    createCanvas(400, 300);
    background(250, 220, 130); //faint yellowish background
    
    noStroke();
    fill(200, 220, 170, 120); //greenish arced shadow on right lower corner
    ellipse(400, 320, 550, 400);

    for(var line1x = 0; line1x < width; line1x += 15) { //initial red series of curves with increments of 15
    	fill(200, 210, 110, 120); //greenish light color to fill curve shapes
    	stroke(250, 70, 20); // red line
    	curve(line1x, line1x, line1x * 10, 100, line1x * 2.5, 200, line1x * 2, height); 

    	curve(line1x - 15, height*1.5, line1x * 10 + 20, 220, line1x/2, 50, line1x * 2, 0);

    	curve(line1x/5, 0, -line1x, 0, line1x, 75, line1x + 50, 200);

    	curve(line1x, -100, -line1x/5, 100, line1x*10, 0, line1x + 50, 200);
    }
    
    for(var line2x = 6; line2x < width; line2x += 15) { //yellow series of curves with increments of 15 but starting more right
    	noFill();
    	stroke(250, 200, 0);
    	strokeWeight(2);
    	curve(line2x, line2x, line2x * 10, 100, line2x * 2.5, 200, line2x * 2, height*2); //thicker top set

    	strokeWeight(1);
    	curve(line2x - 15, height, line2x * 10 + 20, 220, line2x/2, 50, line2x * 2, 0);

    	strokeWeight(.5);
    	curve(line2x/5, 0, -line2x, 0, line2x, 75, line2x + 50, 200); //diminishing bottom sets that overlap with red series and green fills

    	curve(line2x, -100, -line2x/5, 100, line2x*10, 0, line2x + 50, 200);
    }

    for(var line3x = 0; line3x < width; line3x += 20) { //linear series with larger increments of 20
    	stroke(255, 180, 10);
    	strokeWeight(1.5);
    	line(line3x, height +20, line3x*2.3, 200 - line3x/15); //evened out yellow lines on bottom of canvas

    	line(line3x, height+20, line3x*1.8, 180 - line3x/15);

    	line(line3x, height + 20, line3x * 2, 190 - line3x/ 15);

    	fill(200, 50, 0, 150);
    	ellipse(line3x*2, 190 - line3x/15, 10, 10); //ellipse series of red circles

    }
    for(var circle4 = 220; circle4 < width; circle4 += 30) { //ellipse series from right half of canvas to balance out exponential series of red circles
    	fill(200, 50, 0, 150);
    	ellipse(circle4, 190 - circle4/15, 10, 10);
    	ellipse(circle4, 210 - circle4/25, 10, 10);
    }
    for(var line4y = 0; line4y < height; line4y += 15) { //vertical curve series to balance out horizontal strokes
    	fill(200, 100, 10, 50); // orange color with 50 percent transparency
    	curve(width, line4y, 250, line4y, 100, line4y, 0, height - line4y);
    }
}

function draw() {
}

selinal-LookingOutward-04

Bending the Arc by Jennifer Wen Ma

https://fluxprojects.squarespace.com/jennifer-wen-ma/

This sound art installation by Jennifer Wen Ma uses the combined voice frequencies of participants speaking into a microphone to raise the visual of the arc. What I admire about this project is the input of interaction in that more participation and louder singing/ speaking, etc. generate a collaborative effort to “raise the arc,” which allows audience members to reflect the action they are performing metaphorically. I was not able to find any explanations of the algorithms Ma used, but what I can assume from witnessing the piece and researching it is that the height of sound frequency is translated to the bending points in the curve drawn, which moves the line up and down.

Image result for bending the arc jennifer wen ma

Image result for bending the arc jennifer wen ma

selinal-Project-03

sketch

//Selina Lee
//Section C
//selinal@andrew.cmu.edu
//Project-03

var cx = 320; //center points for canvas
var cy = 240;

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

}

function draw() {
	background(50); //off black background

	var x = mouseX; //easy to write mouse variables and to be used in other functions
	var y = mouseY;

	var colorx = mouseX%255; //variables to alter color on canvas without going over 255 RGB limit
	var colory = mouseY%255;

	var oppy = width/2 - mouseY; //reacts opposite of other part in the y direction

	var rad = dist(cx, cy, x, y); //creating area between center point and outerpoint of ellipses for interaction

	//upward and downward moving rectangles
	fill(colorx, 200, colory);
	rect(0, y, 320, 480);

	fill(colory, 200, colorx);
	rect(320, oppy, 320, 480);

	//series of ellipses changing size and color
	fill(colorx, 200, 200);
	ellipse(cx, cy, rad + 150, rad + 150);

	fill(200, colorx, 200);
	ellipse(cx, cy, rad + 140, rad + 50);

	fill(200, 200, colorx);
	ellipse(cx, cy, rad + 50, rad + 140);

	fill(colory, 200, 200);
	ellipse(cx, cy, rad, rad);

	fill(200, colory, 200);
	ellipse(cx, cy, rad - 20, rad - 40);

	fill(200, 200, colory);
	ellipse(cx, cy, rad - 40, rad - 20);

	//series of lines to follow mouse with
	stroke(colory, colorx, colory);
	line(cx, cy, x, y);
	stroke(colorx, 200, 200);
	line(cx, cy, x + 5, y + 5);
	stroke(colorx, colory, 200);
	line(cx, cy, x - 5, y - 5);
	stroke(colory, 200, 200);
	line(cx, cy, x + 5, y);
	stroke(200, colorx, 200);
	line(cx, cy, x - 5, y);
	stroke(200, 200, colory);
	line(cx, cy, x, y + 5);
	stroke(200, colory, colorx);
	line(cx, cy, x, y - 5);
	
	stroke(colorx, 200, 200);
	line(cx, cy, x + 15, y + 15);
	stroke(colorx, colory, 200);
	line(cx, cy, x - 15, y - 15);
	stroke(colory, 200, 200);
	line(cx, cy, x + 15, y);
	stroke(colory, 200, 200);
	line(cx, cy, x - 15, y);
	stroke(200, 200, colory);
	line(cx, cy, x, y + 15);
	stroke(200, colory, colorx);
	line(cx, cy, x, y - 15);
	
	stroke(colorx, 200, 200);
	line(cx, cy, x + 25, y + 25);
	stroke(colorx, colory, 200);
	line(cx, cy, x - 25, y - 25);
	stroke(colory, 200, 200);
	line(cx, cy, x + 25, y);
	stroke(colory, 200, 200);
	line(cx, cy, x - 25, y);
	stroke(200, 200, colory);
	line(cx, cy, x, y + 25);
	stroke(200, colory, colorx);
	line(cx, cy, x, y - 25);
	
	stroke(colorx, 200, 200);
	line(cx, cy, x + 35, y + 35);
	stroke(colorx, colory, 200);
	line(cx, cy, x - 35, y - 35);
	stroke(colory, 200, 200);
	line(cx, cy, x + 35, y);
	stroke(colory, 200, 200);
	line(cx, cy, x - 35, y);
	stroke(200, 200, colory);
	line(cx, cy, x, y + 35);
	stroke(200, colory, colorx);
	line(cx, cy, x, y - 35);
	
	stroke(colorx, 200, 200);
	line(cx, cy, x + 45, y + 45);
	stroke(colorx, colory, 200);
	line(cx, cy, x - 45, y - 45);
	stroke(colory, 200, 200);
	line(cx, cy, x + 45, y);
	stroke(colory, 200, 200);
	line(cx, cy, x - 45, y);
	stroke(200, 200, colory);
	line(cx, cy, x, y + 45);
	stroke(200, colory, colorx);
	line(cx, cy, x, y - 45);
	
	stroke(colorx, 200, 200);
	line(cx, cy, x + 55, y + 55);
	stroke(colorx, colory, 200);
	line(cx, cy, x - 55, y - 55);
	stroke(colory, 200, 200);
	line(cx, cy, x + 55, y);
	stroke(colory, 200, 200);
	line(cx, cy, x - 55, y);
	stroke(200, 200, colory);
	line(cx, cy, x, y + 55);
	stroke(200, colory, colorx);
	line(cx, cy, x, y - 55);
	
	stroke(colorx, 200, 200);
	line(cx, cy, x + 65, y + 65);
	stroke(colorx, colory, 200);
	line(cx, cy, x - 65, y - 65);
	stroke(colory, 200, 200);
	line(cx, cy, x + 65, y);
	stroke(colory, 200, 200);
	line(cx, cy, x - 65, y);
	stroke(200, 200, colory);
	line(cx, cy, x, y + 65);
	stroke(200, colory, colorx);
	line(cx, cy, x, y - 65);
	
	stroke(colorx, 200, 200);
	line(cx, cy, x + 75, y + 75);
	stroke(colorx, colory, 200);
	line(cx, cy, x - 75, y - 75);
	stroke(colory, 200, 200);
	line(cx, cy, x + 75, y);
	stroke(colory, 200, 200);
	line(cx, cy, x - 75, y);
	stroke(200, 200, colory);
	line(cx, cy, x, y + 75);
	stroke(200, colory, colorx);
	line(cx, cy, x, y - 75);
	
	stroke(colorx, 200, 200);
	line(cx, cy, x + 85, y + 85);
	stroke(colorx, colory, 200);
	line(cx, cy, x - 85, y - 85);
	stroke(colory, 200, 200);
	line(cx, cy, x + 85, y);
	stroke(colory, 200, 200);
	line(cx, cy, x - 85, y);
	stroke(200, 200, colory);
	line(cx, cy, x, y + 85);
	stroke(200, colory, colorx);
	line(cx, cy, x, y - 85);
}

The visuals for this project are based on a shadowed ray (the array assortment of lines which follow the position of the mouse but extend from the center of the canvas). The rest of the visuals were based on the centripetal movement of the lines, hence the creation of the ellipse series and their opposition to each other depending where mouseX and mouseY are. I noticed the project resembled an eye which was not intentional, but in order to balance the familiarity of the ellipses, the sliding blocks in the background were added as a more linear and angular contrast.

selinal-LookingOutwards-03

Water-Based Additive Manufacturing

https://www.media.mit.edu/projects/water-based-additive-manufacturing/overview/

This research project investigates the creation and feasibility of a new type of digital fabrication that is based around water and utilizes additive manufacturing (AM) which will allow for gradually built, small to large-scale structures. Because of its basis around water, this method of fabrication utilizes the incorporation of biomaterial and organic aggregates which allows for a more sustainable and eco-friendly means of production. I admire the change in materiality of this project because it aims to solve issues of construction and degradation all together. What I know of the algorithms used for this research project is that they are not as geometrically sound. Primary methods of digital fabrication are centered around geometrics which use more energy to construct and are unstable. This new method uses an organic algorithm in terms of shape and additive layers.

Image result for Water-Based Additive Manufacturing