From f70370d05e9eb502279e92b0b10fdad15b337bc4 Mon Sep 17 00:00:00 2001 From: root <> Date: Thu, 24 Apr 2025 12:00:29 +0000 Subject: [PATCH] Revert "remove negligible vector projection" This reverts commit 6123c0258185d1fe579aad62953b54fbbb896c57. --- sketch.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/sketch.js b/sketch.js index 73590c8..e08bbe8 100644 --- a/sketch.js +++ b/sketch.js @@ -38,18 +38,34 @@ function move_charges() { const acceleration_mag = 1 / displacement.mag() * 0.005; let ai = displacement.copy().normalize().mult(acceleration_mag); let aj = p5.Vector.mult(ai, -1); - charges[i].acceleration.add(ai); - charges[j].acceleration.add(aj); + let ai_norm = project_onto_plane(ai, charges[i].position); + + let aj_norm = project_onto_plane(aj, charges[j].position); + + charges[i].acceleration.add(ai_norm); + charges[j].acceleration.add(aj_norm); } } for (let i = 0; i < charges.length; i += 1) { let charge = charges[i]; charge.velocity = charge.velocity.add(charge.acceleration); + //charge.velocity = project_onto_plane(charge.velocity, charge.position); charge.position = charge.position.add(charge.velocity); charge.position.normalize(); } } +function project_onto_unit_vector(v, unit_vector) { + let size = p5.Vector.dot(v, unit_vector); + return p5.Vector.mult(unit_vector, size); +} + +/// Project `v` onto the plane normal to `unit_vector` +function project_onto_plane(v, unit_vector) { + let v_proj = project_onto_unit_vector(v, unit_vector); + return v.sub(v_proj) +} + function make_charges(n) { charges = []; for (let i = 0; i < n; i += 1) {