58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
import { Vector } from './vector.js'
|
|
import { KepplerObject } from './kepplerObject.js'
|
|
import * as utils from './utils.js'
|
|
|
|
|
|
let ctx;
|
|
let planets = [];
|
|
let G = 5;
|
|
let sun = {};
|
|
|
|
function update(dt) {
|
|
for (let p of planets) {
|
|
p.track();
|
|
p.attrackt(sun);
|
|
p.move();
|
|
}
|
|
}
|
|
|
|
window.onload = function () {
|
|
let canvas = document.getElementById("canvas");
|
|
ctx = canvas.getContext("2d");
|
|
|
|
document.querySelector('#canvas').addEventListener('click', setPlanet)
|
|
sun = new KepplerObject("sun", 100, 20, new Vector(canvas.clientWidth / 2, canvas.clientHeight / 2), new Vector(0, 0), "yellow");
|
|
|
|
window.requestAnimationFrame(draw);
|
|
}
|
|
|
|
function addPlanet(position) {
|
|
let startVel = Math.sqrt(2 * G * 10 / position.getDistance(sun.position));
|
|
let colors = ['red', 'blue', 'pink', 'green', 'grey'];
|
|
|
|
startVel *= utils.random(1, 100) <= 10 ? -1 : 1;
|
|
startVel *= 1.4;
|
|
|
|
let planet = new KepplerObject("planet", utils.random(5, 25), utils.random(5, 15), position, new Vector(startVel, startVel), colors[utils.random(0, colors.length)]);
|
|
planets.push(planet);
|
|
}
|
|
|
|
function setPlanet(event) {
|
|
let position = new Vector(event.x, event.y);
|
|
addPlanet(position);
|
|
}
|
|
|
|
function draw(time) {
|
|
let dt = utils.getDeltaTime(time);
|
|
utils.clearScreen(ctx, '#000000');
|
|
|
|
sun.draw(ctx);
|
|
|
|
update(dt);
|
|
|
|
for (let p of planets) {
|
|
p.draw(ctx);
|
|
}
|
|
|
|
window.requestAnimationFrame(draw);
|
|
} |