physics oopsie: coulomb's law is 1/r^2 not 1/r
This commit is contained in:
parent
2a29ee0c51
commit
5e04ad107f
2 changed files with 12 additions and 6 deletions
|
@ -70,7 +70,7 @@ function draw() {
|
|||
camera.centerZ = 0;
|
||||
|
||||
make_lights();
|
||||
if (physics) move_charges(charges);
|
||||
if (physics) move_charges(charges, 8e-4);
|
||||
|
||||
draw_charges(sphere_radius);
|
||||
if (skeleton) draw_skeleton(sphere_radius);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
function move_charges(charges) {
|
||||
function move_charges(charges, force_constant) {
|
||||
for (let charge of charges) {
|
||||
charge.acceleration.setMag(0);
|
||||
}
|
||||
|
@ -8,15 +8,21 @@ function move_charges(charges) {
|
|||
charges[i].position,
|
||||
charges[j].position,
|
||||
);
|
||||
let acceleration_mag = 1 / displacement.mag() * 0.001;
|
||||
const force_mag = 1 / displacement.magSq() * force_constant;
|
||||
// XXX possible extension: divide by charge's mass
|
||||
const ai_mag = force_mag;
|
||||
const aj_mag = force_mag;
|
||||
let ai;
|
||||
if (acceleration_mag === Infinity) {
|
||||
let aj;
|
||||
if (force_mag === Infinity) {
|
||||
ai = p5.Vector.random3D();
|
||||
aj = p5.Vector.random3D();
|
||||
} else {
|
||||
ai = displacement.copy().normalize();
|
||||
aj = ai.copy().mult(-1);
|
||||
}
|
||||
ai.mult(acceleration_mag);
|
||||
let aj = p5.Vector.mult(ai, -1);
|
||||
ai.mult(ai_mag);
|
||||
aj.mult(aj_mag);
|
||||
project_onto_plane(ai, charges[i].position);
|
||||
project_onto_plane(aj, charges[j].position);
|
||||
charges[i].acceleration.add(ai);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue