Files
sunny9898/task8/_ref/noc-examples-processing-master/chp06_agents/SimpleScalarProjection/SimpleScalarProjection.pde
louiscklaw 5637fbf94f update,
2025-02-01 02:07:58 +08:00

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;
}