1

I want to create points and then store them in an array. I'm doing this to put a linear regression through my data points afterwards. So I need to be able to cycle through all my points.

I could not find anything like that on the web for processing and as I was not really able to do it, I need your help. Here is my approach, but it doesn't seem to work:

ArrayList<dataPoint> dataPoints = new ArrayList<dataPoint>();

void setup(){
  size(1000, 1000); 
  background(255);
}
void draw(){
  for (int i = 1; i == dataPoints.size(); i++) { 
    // An ArrayList doesn't know what it is storing so we have to cast the object coming out
    dataPoint Point = dataPoints.get(i);
    Point.display();

  }  
}

void mousePressed() {
  dataPoints.add(new dataPoint(mouseX, mouseY));
}

class dataPoint {

  float x;
  float y;

  dataPoint(int tempX, int tempY) {
    x = tempX;
    y = tempY;
  }

  void display() {
    strokeWeight(10);
    stroke(255,0,0);
    point(x,y);
  }
} 

I would like to have a program to create points and store them in an array (or something similar, that you can cycle through).

enwo02
  • 25
  • 3
  • Can you please be more specific? What do you mean when you say this doesn't work? What did you expect the code to do? What did it do instead? – Kevin Workman May 13 '19 at 15:18

1 Answers1

2

Most of your code makes sense, there are only two gotchas I could spot that may prevent you from cycling through all your points and visualising them:

  1. your condition is will go to an array index out of bounds: try for (int i = 0; i < dataPoints.size(); i++)
  2. remember to clear the frame, otherwise you're drawing on top of the same dots over and over again

Remember array indices start at 0 in Processing/Java (and likewise the last index will not be the size() of your array, but the 1 less, hence the < in the for condition)

Here is your code with the above tweaks:

ArrayList<dataPoint> dataPoints = new ArrayList<dataPoint>();

void setup(){
  size(1000, 1000); 


}
void draw(){
  background(255);
  for (int i = 0; i < dataPoints.size(); i++) { 
    // An ArrayList doesn't know what it is storing so we have to cast the object coming out
    dataPoint Point = dataPoints.get(i);
    Point.display();

  }  
}

void mousePressed() {
  dataPoints.add(new dataPoint(mouseX, mouseY));
}

class dataPoint {

  float x;
  float y;

  dataPoint(int tempX, int tempY) {
    x = tempX;
    y = tempY;
  }

  void display() {
    strokeWeight(10);
    stroke(255,0,0);
    point(x,y);
  }
} 

Note that Processing has a handy PVector class (which has x,y properties) so you could do something like this:

ArrayList<PVector> dataPoints = new ArrayList<PVector>();

void setup(){
  size(1000, 1000); 
  strokeWeight(10);
  stroke(255,0,0);
  noFill();
}
void draw(){
  background(255);
  beginShape();
  for (int i = 0; i < dataPoints.size(); i++) { 
    PVector point = dataPoints.get(i);
    vertex(point.x,point.y);
  }  
  endShape();
}

void mousePressed() {
  dataPoints.add(new PVector(mouseX, mouseY));
}

This a bit of a detail, but I recommend to following Java Naming Convention to keep the code consistent. (For example: renaming the dataPoint class to DataPoint and renaming the Point instance to point)

George Profenza
  • 50,687
  • 19
  • 144
  • 218