const dt = intendedDT / (substeps);
function mouseClicked() {
particles.push(new Particle(mouseX, mouseY, 6, particles.length))
createCanvas(windowWidth, windowHeight);
for(let i = 0; i < 150; i++) {
let y = random(0,height);
let bonds = x > width/2 ? 1:1;
particles.push(new Particle(x, y, bonds,i));
particles[i].addForce(random(50,-50),random(50,-50));
function keyPressed() { console.log(particles)}
for(let i = 0; i < substeps; i++) {
for(let i = 0; i < particles.length; i++) {
fill(colors[particles[i].bonds-1])
circle(particles[i].x, particles[i].y, 5+particles[i].bonds);
for(let i = 0 ; i < particles.length; i++) {
particles[i].addForce(random(heating,-heating),random(heating,-heating));
for(let j = 0; j < particles.length; j++) {
let dist = sqrt((particles[i].x - particles[j].x)**2 + (particles[i].y - particles[j].y)**2);
let normalX = (particles[i].x - particles[j].x) / dist;
let normalY = (particles[i].y - particles[j].y) / dist;
if(dist < 20 && particles[i].availableBonds >= 1 ) {
if(particles[j].availableBonds >= 1) {
particles[i].bond(particles[j], 1);
particles[j].collapse(particles[i]);
if(particles[i].bondedTo(particles[j].id)) {
let avgX = 0.5*(particles[i].x + particles[j].x);
let avgY = 0.5*(particles[i].y + particles[j].y);
particles[i].nx = avgX + normalX * (4+(particles[i].bonds+particles[j].bonds)*0.5);
particles[i].ny = avgY + normalY * (4+(particles[i].bonds+particles[j].bonds)*0.5);
particles[j].nx = avgX - normalX * (4+(particles[i].bonds+particles[j].bonds)*0.5);
particles[j].ny = avgY - normalY * (4+(particles[i].bonds+particles[j].bonds)*0.5);
particles[i].addForce (0.5*(particles[i].nx - particles[i].x), 0.5*(particles[i].ny - particles[i].y))
particles[j].addForce (0.5*(particles[j].nx - particles[j].x), 0.5*(particles[j].ny - particles[j].y))
if(particles[i].ax**2 + particles[i].ay**2 > 7) {
particles[i].debond(particles[j])
if(isNaN(particles[i].ax+particles[i].ay)) {
console.log(particles[i])
for(let i = 0 ; i < particles.length; i++) {
particles[i].updateVel();
particles[i].updatePos();