ArrayList < PVector > data = new ArrayList < PVector > ();
float m, b;
void setup() {
size(400, 400);
fill(255);
}
void mousePressed() {
data.add(new PVector(mouseX, mouseY));
}
void draw() {
background(26);
for (int i = 0; i < data.size(); i++) ellipse(data.get(i).x, data.get(i).y, 5, 5);
if (data.size() > 0) {
performRegression();
drawLine();
}
}
void performRegression() {
float ysum = 0, xsum = 0;
for (int i = 0; i < data.size(); i++) {
xsum += data.get(i).x;
ysum += data.get(i).y;
}
float xmean = xsum / data.size(), ymean = ysum / data.size(), num = 0, den = 0;
for (int i = 0; i < data.size(); i++) {
num += (data.get(i).x - xmean) * (data.get(i).y - ymean);
den += (data.get(i).x - xmean) * (data.get(i).x - xmean);
}
m = num / den;
b = ymean - m * xmean;
}
void drawLine() {
float x1 = 0, y1 = m * x1 + b, x2 = width, y2 = m * x2 + b;
stroke(255);
line(x1, y1, x2, y2);
}