xxxxxxxxxx
const K = 1;
const N = 6;
var nodes = [];
var nextNodes;
var delta;
var lastTime;
class Node {
constructor(x, y) {
this.pos = createVector(x, y);
this.force = createVector(0,0);
this.v = createVector(0,0);
}
draw() {
noStroke();
fill(0);
ellipse(this.pos.x, this.pos.y, 20, 20);
}
}
function setup() {
createCanvas(windowWidth, windowHeight);
for (var i = 0; i < N; i++) {
nodes.push(new Node(500, 200+i*100));
}
lastTime = Date.now();
}
function draw() {
var time = Date.now();
delta = time - lastTime;
lastTime = time;
getNextNodes();
stroke(0);
strokeWeight(2);
for (var i = 0; i < N-1; i++) {
nodes[i].draw();
line(nodes[i].pos.x, nodes[i].pos.y, nodes[i+1].pos.x, nodes[i+1].pos.y);
}
nodes[N-1].draw();
}
function getNextNodes() {
nextNodes = nodes;
for (var i = 0; i < N-1; i++) {
var l = p5.Vector.dist(nodes[i].pos, nodes[i+1].pos);
var force = p5.Vector.sub(nodes[i+1].pos, nodes[i].pos);
force.setMag(K * l);
nextNodes[i].force.add(force);
nextNodes[i+1].force.sub(force);
}
for (var i = 0; i < N; i++) {
nextNodes[i].pos.add(p5.Vector.mult(nodes[i].v, delta));
nextNodes[i].v.add(p5.Vector.mult(nodes[i].force, delta));
nextNodes[i].force = createVector(0,0);
}
nodes = nextNodes;
}