'use strict'; class Vector{ constructor(x, y){ this.x = x; this.y = y; } scalarProduct(other){ return this.x*other.x + this.y*other.y; } magnitude(){ return Math.sqrt(this.x**2 + this.y**2); } //vector product would be useless because the resultant would be in the z-axis angle(other = new Vector(1, 0)){ //need some magnitude for origin vector to avoid division by 0 //cosθ = a.b/|a||b| return Math.acos(this.scalarProduct(other)/(this.magnitude()*other.magnitude())); } //figuring out coordinates from angle and distance positionFromAngle(angle, distance){ return new Vector((this.x + distance) * Math.cos(angle), (this.y+distance)*Math.sin(angle)); } } class Asteroid{ //FIXME: Asteroid generation is very wonky constructor(size, position, edges=5){ this.size = size; this.edges = edges; this.position = position; this.nodes = [this.position]; for(let i=0; i { ctx.lineTo(node.x,node.y); }) ctx.closePath(); ctx.stroke(); } } //initializing canvas const canvas = document.getElementById("canvas"); canvas.width = window.innerWidth; canvas.height = window.innerHeight; const ctx = canvas.getContext("2d"); const asteroid = new Asteroid(50, new Vector(300, 240)); function animate(){ requestAnimationFrame(animate); ctx.clearRect(0, 0, canvas.width, canvas.height); asteroid.draw(ctx); } animate();