/
Lesson 4.4 - Motion and Multiple Reactor Points
Lesson 4.4 - Motion and Multiple Reactor Points
int gridWidth = 30; int gridHeight = 30; float shapeWidth = 20; float shapeHeight = 20; float reactorScaler = .02; int amplitude = 2; int xOffset; int yOffset; ArrayList<reactorPoint> reactorList = new ArrayList<reactorPoint>(); ArrayList<graphicObject> graphicList = new ArrayList<graphicObject>(); void setup() { size(800, 800); xOffset = floor(width/2-(shapeWidth*gridWidth/2)); yOffset = floor(height/2-(shapeHeight*gridHeight/2)); reactorPoint temp = new reactorPoint(400, 400); reactorList.add(temp); background(255); noFill(); for (int i = 0; i<gridWidth; i++ ) { for (int j = 0; j<gridHeight; j++ ) { graphicList.add(new graphicObject(i*shapeWidth, j*shapeHeight)); } } }; void draw() { background(255); pushMatrix(); translate(xOffset, yOffset); //translate array to center of screen for (int i = 0; i<reactorList.size(); i++ ) { reactorList.get(i).count(); } println("reactorList.size() "+reactorList.size()); for (int i = 0; i<graphicList.size(); i++ ) { graphicList.get(i).draw(reactorList); } popMatrix(); }; int mouse_X() { return (mouseX - xOffset); //correct positions matrix translations } int mouse_Y() { return (mouseY - xOffset); //correct positions matrix translations } void mouseClicked() { reactorPoint temp = new reactorPoint(mouse_X(), mouse_Y()); reactorList.add(temp); }; class graphicObject { PVector _loc; float _scale = 1.0; graphicObject(float x, float y) { _loc = new PVector(x, y); } void draw(ArrayList<reactorPoint> reList) { float reactorDistance = 0; int myStartTime = 0; float n = 0; _scale = 1.0; for (int i = 0; i<reList.size(); i++) { reactorDistance = dist(reList.get(i)._loc.x, reList.get(i)._loc.y, _loc.x, _loc.y); myStartTime = int(reList.get(i)._counter-reactorDistance); n = radians(myStartTime)*1.5; _scale += sin(n)*amplitude; } _scale = _scale/reList.size(); pushMatrix(); translate(_loc.x, _loc.y); scale(_scale); strokeWeight(0.2); ellipse(0, 0, shapeWidth, shapeHeight); popMatrix(); } } class reactorPoint { PVector _loc; int _counter; reactorPoint (int x, int y) { _counter = 0; _loc = new PVector(x, y); } void count() { _counter++; } }
, multiple selections available,