Discussion of my work process and how I worked out all my designs:
import processing.serial.*; Serial myPort; Draw myDraw; Pulse myPulse; Random myRandom; Stretch myStretch; ArrayList<Sphere> mySphere; ArrayList<Flow> flows; boolean ellipse = true; float values ; float xPos; float yPos; float prevValues = 0; void setup() { background(0); fullScreen(P3D); // size(800, 800, P3D); myDraw = new Draw(width/2,width/2); myPulse = new Pulse(width/2,height/2); myRandom = new Random(width/2,height/2); myStretch = new Stretch(); mySphere = new ArrayList<Sphere>(); flows = new ArrayList<Flow>(); String portName = "/dev/cu.usbserial-DA01LJI0"; myPort = new Serial(this, portName, 9600); myPort.bufferUntil('\n'); } void draw() { noCursor(); println(values,xPos,yPos); if (values == 0) { central(); } if (values == 3) { ellipse = false; disco_ball(); } if (values == 5) { myDraw.shape_draw(); myDraw.update(xPos,yPos); ellipse = false; } if (values == 7) { ellipse = false; myStretch.stretch(); myStretch.update(xPos,yPos); } if (values == 9) { ellipse = false; myPulse.pulse(); myPulse.update(xPos,yPos); } if (values == 11) { ellipse = false; myRandom.random_circle(); myRandom.update(xPos,yPos); } if (values == 13) { ellipse = false; flows.add(new Flow()); for (int i = flows.size()-1; i>=0; i--) { Flow s = flows.get(i); s.update(xPos,yPos); s.render(); if (s.isDead()) { flows.remove(i); } } } if (values == 15) { ellipse = false ; myPulse.pulse(); myPulse.update(xPos,yPos); } if (values != prevValues){ clear(); } prevValues = values; } void central() { pushMatrix(); background(0); noFill(); stroke(255); strokeWeight(1.5); ellipse(width/2, height/2, 300, 300); popMatrix(); } void serialEvent(Serial myPort) { String inString = myPort.readStringUntil('\n'); inString = trim(inString); String[] james = split(inString, ','); if (james[0] != null) { values = float(trim(james[0])); } //X position if (james[1] != null) { james[1] = trim(james[1]); xPos = float(james[1]); // println(xPos); xPos = map(xPos,0,1023,0,width); } //Y position if (james[2] != null) { james[2] = trim(james[2]); yPos = float(james[2]); yPos = map(yPos,1023,0,100,height-100); } myPort.write('x'); } void disco_ball(){ pushMatrix(); background(0); translate(width/2,height/2,0); mySphere.add(new Sphere()); for (int i = mySphere.size()-1; i>=0; i--) { // manipulate the objects Sphere s = mySphere.get(i); s.update(xPos,yPos); s.render(); if (s.isDead()) { mySphere.remove(i); } } popMatrix(); }
ArrayList<Sphere> spheres; class Sphere { float xPos; float yPos; float xSpeed; float ySpeed; float diam; float alpha; float moving_x; float moving_y; Sphere() { alpha = random(127, 350); xPos = width/4-475; yPos = height/4-300; xSpeed = random(-10., 10.); ySpeed = random(-10., 10.); diam = 150; } boolean isDead() { if (alpha <= 0) { return true; } else { return false; } } void render() { strokeWeight(2); alpha -=3; diam = diam-3.5; float yellow = map(diam,100,200,255,0); float interesting = map(moving_y,0,height,yellow,0); stroke(255, 255,interesting,alpha); float cool = map(moving_x,0,width,0,255); fill(0,cool); pushMatrix(); translate(xPos,yPos,yPos); sphere(diam); popMatrix(); } void update(float x, float y) { moving_x = x; moving_y = y; xPos+=xSpeed; yPos+=ySpeed; } }
class Draw { int num_vertex; float radius; float centerX; float centerY; float Xmove; float Ymove; float[] x = new float[num_vertex]; float[] y = new float[num_vertex]; float angle = radians(30); Draw(float _x,float _y) { Xmove = _x; Ymove = _y; smooth(); noFill(); centerX = width/2; centerY = height/2; num_vertex = 12; radius = 150; } void update(float xPos,float yPos){ Xmove = xPos; Ymove = yPos; } void shape_draw() { noFill(); stroke(0); strokeWeight(1); ellipse(width/2, height/2, 300, 300); for (int i=0; i<num_vertex; i++) { x = append(x, cos(angle*i) * radius); y = append(y, sin(angle*i) * radius); } stroke(255, 255, random(0, 250), 80); if (Xmove != 0 || Ymove != 0) { //WHERE I CHANGED OUT THE MOUSE X AND Y centerX += (Xmove-centerX) * 0.05; centerY += (Ymove-centerY) * 0.05; } for (int i=0; i<num_vertex; i++) { // cause random movements for verteces within these parameters x[i] += random(-1.25, 1.25); y[i] += random(-1.25, 1.25); } beginShape(); curveVertex(x[num_vertex-1]+centerX, y[num_vertex-1]+centerY); for (int i=0; i<num_vertex; i++) { // for every vertex make a point about the center curveVertex(x[i]+centerX, y[i]+centerY); } curveVertex(x[0]+centerX, y[0]+centerY); curveVertex(x[1]+centerX, y[1]+centerY); endShape(); } }
class Flow { // variables for the object float xPos; float yPos; float xSpeed; float ySpeed; float alpha; float size; float moving_x; float moving_y; Flow() { background(0); alpha = random(0, 255); xPos = 0; yPos = 0; xSpeed = random(-20,20); ySpeed = 20; } boolean isDead() { if (alpha <= 0) { return true; } else { return false; } } void update(float new_x, float new_y) { moving_x = new_x; moving_y = new_y; xPos+=xSpeed; yPos+=ySpeed; } void render() { fill(0); noStroke(); ellipse(width/2,height/2,300,300); alpha -=1; size +=1; fill(255,255,alpha,alpha); for(float a = 0; a <=width;a=a+100){ pushMatrix(); float rotationx = map(moving_x,0,width,-PI/8,PI/8); float rotationy = map(moving_y,0,height,-PI/8,PI/8); rotateX(rotationx); rotateY(rotationy); ellipse(xPos+a,yPos,size,size); popMatrix(); } } }
class Pulse { float parameter_x; float parameter_y; float movex; float movey; Pulse(float movementsx, float movementsy){ movex = movementsx; movey = movementsy; } void update(float xPos,float yPos){ movex = xPos; movey = yPos; } void pulse(){ if((xPos <970 && xPos>964) &&(yPos<538 && yPos>534)){ parameter_x = random(50,350); parameter_y = height/2; }else{ parameter_x = movex; parameter_y = movey; if(parameter_x > 350){ parameter_x = 300; } } pushMatrix(); smooth(); frameRate(15); strokeWeight(2.5); stroke(255,255,random(0,300)); pushMatrix(); fill(0,20); rect(-100,-100,width+200,height+200); popMatrix(); translate(width/2,height/2); int resolution = (int)map(parameter_y,100,height-100,2, 30); float radius = parameter_x-width/2+400; float angle = TWO_PI/resolution; beginShape(); for (int i=0; i<=resolution; i++){ float x = cos(angle*i) * radius; float y = sin(angle*i) * radius; vertex(x, y); } endShape(); popMatrix(); } }
class Random{ float x_go; float y_go; Random(float movementx,float movementy){ x_go = movementx; y_go = movementy; } void update(float xPos,float yPos){ x_go = xPos; y_go = yPos; } void random_circle(){ smooth(); background(0); frameRate(45); pushMatrix(); fill(0,50); rect(0,0,width,height); popMatrix(); noStroke(); float fadeX = (float)x_go/width; float angle = radians(360/float(300)); for (int i=0; i<300; i++){ float circleX = width/2 + cos(angle*i)*150; float circleY = height/2 + sin(angle*i)*150; float randomX = random(0,width); float randomY = random(0,height); float x = lerp(randomX,circleX, fadeX); float y = lerp(randomY,circleY, fadeX); float blue = map(y_go,0,width-50,0,255); fill(255,255,blue,200); ellipse(x,y,random(0,20),random(0,20)); } } }
class Stretch{ float xmove; float ymove; void update(float xPos,float yPos ){ xmove = xPos; ymove = yPos; } void stretch(){ background(0); strokeCap(SQUARE); smooth(); noFill(); float rotationx = map(xPos,0,width,-PI/6,PI/6); float rotationy = map(yPos,0,height,-PI/6,PI/6); rotateX(rotationx); rotateY(rotationy); float blue = map(xPos,0,width,0,240); stroke(255,255,blue,100); translate(width/2,height/2); int circleResolution = (int) map(yPos, 0,height, 50,120); float radius = xPos-width/2 + 50; float angle = TWO_PI/circleResolution; strokeWeight(yPos/80+5); beginShape(); for (int i=0; i<=circleResolution; i++){ float x = cos(angle*i) * radius; float y = sin(angle*i) * radius; rect(0,0,x,y); line(0,0,x,y); } endShape(); } }
4 of my demos in video: