26 lines
586 B
JavaScript
26 lines
586 B
JavaScript
import {GRAVITATIONAL_CONSTANT as G} from '../consts.mjs';
|
|
|
|
export default class Body {
|
|
constructor(x, y, mass) {
|
|
this.x = x;
|
|
this.y = y;
|
|
this.r = 0;
|
|
this.xvel = 0;
|
|
this.yvel = 0;
|
|
this.rvel = 0;
|
|
this.mass = mass;
|
|
}
|
|
|
|
tickGravity(bodies) {
|
|
bodies.forEach(b => {
|
|
let force = b.mass / this.mass / (distanceTo(b) ** 2) * G;
|
|
let angle = Math.atan2(b.y - this.y, b.x - this.x);
|
|
this.xvel += Math.cos(angle) * force;
|
|
this.yvel += Math.sin(angle) * force;
|
|
});
|
|
}
|
|
|
|
distanceTo(body) {
|
|
return Math.sqrt(((body.x - this.x) ** 2) + ((body.y - this.y) ** 2));
|
|
}
|
|
}
|