//---- normal P5 code -------------------------------------------------------
var data = [];
//slope
var m = 1;
//y-intercept
var b = 0;
function setup()
{
createCanvas(400, 400);
background(51);
}
function mousePressed(){
var x = map(mouseX, 0, width, 0, 1);
var y = map(mouseY, 0, width, 1, 0);
var point = createVector(x, y);
data.push(point);
}
function drawLine(){
var x1 = 0;
var y1 = m * x1 + b;
var x2 = 1;
var y2 = m * x2 + b;
x1 = map(x1, 0, 1, 0, width)
y1 = map(y1, 0, 1, height, 0)
x2 = map(x2, 0, 1, 0, width)
y2 = map(y2, 0, 1, height, 0)
stroke (255, 0, 255);
line(x1, y1, x2, y2);
}
function linearRegression(){
var xsum = 0;
var ysum = 0;
for (var i = 0; i < data.length; i++){
xsum += data[i].x;
ysum += data[i].y;
}
var xmean = xsum / data.length;
var ymean = ysum / data.length;
var num = 0;
var den = 0;
for (var i = 0; i < data.length; i++){
var x = data[i].x;
var y = data[i].y;
num += (x - xmean) * (y - ymean);
den += (x - xmean) * (x - xmean);
}
m = num / den;
b = ymean - (m * xmean);
}
function draw()
{
background(51);
for(var i = 0; i < data.length; i++){
var x = map(data[i].x, 0, 1, 0, width);
var y = map(data[i].y, 0, 1, height, 0);
fill(255);
stroke(255);
ellipse(x,y,8,8);
}
if (data.length > 1){
linearRegression();
drawLine();
}
}