PlanetJs/orbital.js
2022-10-04 22:13:17 +03:00

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);
}