42 lines
823 B
Plaintext
42 lines
823 B
Plaintext
|
|
void setup() {
|
|
size(600, 360);
|
|
}
|
|
|
|
void draw() {
|
|
background(255);
|
|
|
|
PVector a = new PVector(20,300);
|
|
PVector b = new PVector(500,250);
|
|
PVector mouse = new PVector(mouseX,mouseY);
|
|
|
|
stroke(0);
|
|
strokeWeight(2);
|
|
line(a.x,a.y,b.x,b.y);
|
|
line(a.x,a.y,mouse.x,mouse.y);
|
|
fill(0);
|
|
ellipse(a.x,a.y,8,8);
|
|
ellipse(b.x,b.y,8,8);
|
|
ellipse(mouse.x,mouse.y,8,8);
|
|
|
|
PVector norm = scalarProjection(mouse,a,b);
|
|
strokeWeight(1);
|
|
stroke(50);
|
|
line(mouse.x,mouse.y,norm.x,norm.y);
|
|
|
|
noStroke();
|
|
fill(255,0,0);
|
|
ellipse(norm.x,norm.y,16,16);
|
|
}
|
|
|
|
|
|
PVector scalarProjection(PVector p, PVector a, PVector b) {
|
|
PVector ap = PVector.sub(p, a);
|
|
PVector ab = PVector.sub(b, a);
|
|
ab.normalize(); // Normalize the line
|
|
ab.mult(ap.dot(ab));
|
|
PVector normalPoint = PVector.add(a, ab);
|
|
return normalPoint;
|
|
}
|
|
|