Interaction Design WikiProgramming

Multiple Reactor Points

 

 

 

 

ArrayList<PVector> reactorList = new ArrayList<PVector>();
int maxPointCount = 20;
int gridWidth = 30;
int gridHeight = 30;
float dist_x = 20; 
float dist_y = 20; 
float shapeWidth = 20;
float shapeHeight = 20;
int xOffset;
int yOffset;
float reactorScaler = .003;

void setup() {
  size(800, 800);
  smooth();
}

void draw() {
  background(255);
  xOffset = floor(width/2-(dist_x*gridWidth/2));
  yOffset = floor(height/2-(dist_y*gridHeight/2));
  PVector temp = new PVector(mouse_X(), mouse_Y());
  reactorList.add(temp);
  if (reactorList.size() >= maxPointCount) {
    reactorList.remove(0);
  }
  pushMatrix(); //saves current position of the coordinate system
  translate(xOffset, yOffset);//translate grid to center 
  noStroke();
  fill(0);
  for (int i = 0; i<gridWidth; i++ ) {
    for (int j = 0; j<gridHeight; j++ ) {
      PVector myPos = new PVector(i*dist_x, j*dist_y);
      PVector cpt = closestPoint(myPos);
      float reactorDistance = dist(cpt.x, cpt.y, myPos.x, myPos.y);
      float scaler = reactorDistance*reactorScaler;
      ellipse(myPos.x, myPos.y, shapeWidth*scaler, shapeHeight*scaler);
    };
  };
  //drawReactors();   // unconment to see the trail of reactors created by mouse movement
  popMatrix();
}

void drawReactors() {


  stroke(255, 0, 0);
  for (int i = 0; i <reactorList.size()-1; i++) {
    line(reactorList.get(i).x, reactorList.get(i).y, reactorList.get(i+1).x, reactorList.get(i+1).y);
  }
}

PVector closestPoint(PVector location) {
  PVector tempPoint = reactorList.get(0);
  float bestDistance = dist(tempPoint.x, tempPoint.y, location.x, location.y);
  for (int i = 0; i < reactorList.size(); i++) {
    float tempDistance = dist(reactorList.get(i).x, reactorList.get(i).y, location.x, location.y);
    if (tempDistance<bestDistance) {
      bestDistance = tempDistance;
      tempPoint = reactorList.get(i).get();
    }
  }
  return tempPoint;
}

int mouse_X() {
  return (mouseX - xOffset); //correct positions matrix translations
}

int mouse_Y() {
  return (mouseY - xOffset); //correct positions matrix translations
}