xxxxxxxxxx
62
let r = 5;
let N = 2000;
let G = 1;
let dt = 0.2;
let grid;
let particles_pos = new Float32Array(2*N);
let particles_vel = new Float32Array(2*N);
let forces = new Float32Array(2*N)
function setup() {
createCanvas(400, 400);
grid = new Grid(width, height, r, 10);
for(let i = 0; i < 2*N; ++i) {
particles_pos[i] = random()*400;
}
particles_vel.fill(0);
forces.fill(0);
noStroke();
fill("purple");
stroke("red");
}
function show_particles() {
strokeWeight(2)
beginShape(POINTS);
for(let p = 0; p < N; p += 1 ) {
stroke(particles_vel[2*p]*10, particles_vel[2*p+1]*10, (particles_vel[2*p] + particles_vel[2*p+1])*8)
vertex(particles_pos[2*p],particles_pos[2*p+1]);
}
endShape();
}
function update_particles() {
for(let i = 0; i < 2*N; i += 1 ) {
particles_vel[i] += forces[i] * dt;
particles_vel[i] *= 0.99
particles_pos[i] += particles_vel[i] * dt;
if(particles_pos[i] < 0) {
particles_pos[i] = random();
particles_vel[i] *= -0.99;
}
if(particles_pos[i] > 400) {
particles_pos[i] = 400 - random();
particles_vel[i] *= -0.99;
}
}
}
function draw() {
background(220);
forces.fill(0);
for(let p = 0; p < N; p += 1 ) {
forces[2*p + 1] = G;
}
grid.update(particles_pos)
grid.compute_interactions(particles_pos, forces);
// console.log(forces)
update_particles();
show_particles();
}