88 lines
2.2 KiB
JavaScript
88 lines
2.2 KiB
JavaScript
const { writeFileSync } = require('fs');
|
|
|
|
const xMax = 1080.0;
|
|
const yMax = 1920.0;
|
|
|
|
const framesMin = 30 * 7;
|
|
const framesMax = 30 * 60;
|
|
|
|
const distanceMax = 30.0;
|
|
|
|
const buffer = 50;
|
|
|
|
let xStart = 0;
|
|
let yStart = 0;
|
|
let frames = framesMin;
|
|
let distance = 15.0;
|
|
let angle = 45;
|
|
|
|
let angles = [ 45, 45 + 90, 45 + 180, 45 + 270];
|
|
|
|
let searchHit = 1;
|
|
|
|
function simulate (x, y, frames, angle, distance) {
|
|
for (let i = 0; i < frames; i++) {
|
|
x = x + distance * Math.cos(angle * Math.PI / 180.0);
|
|
y = y + distance * Math.sin(angle * Math.PI / 180.0);
|
|
if (x >= 1080.0 || x <= 0.0) {
|
|
angle = 180 - angle;
|
|
}
|
|
if (x >= 1080.0) x = 1080.0;
|
|
if (x <= 0.0) x = 0.0;
|
|
if (y >= 1920.0 || y <= 0.0) {
|
|
angle = 360 - angle;
|
|
}
|
|
if (y >= 1920.0) y = 1920.0;
|
|
if (y <= 0.0) y = 0.0;
|
|
}
|
|
return { x, y, angle }
|
|
}
|
|
|
|
function simulateAll () {
|
|
let res;
|
|
let attempts = 0;
|
|
let startTime;
|
|
let duration;
|
|
let secondsLeft;
|
|
for (let x = buffer; x < xMax-buffer; x++ ) {
|
|
for (let y = buffer; y < yMax-buffer; y++) {
|
|
startTime = +new Date();
|
|
console.time(`${x},${y}`)
|
|
for (let a = 0; a < 4; a++) {
|
|
for (let d = 0; d < 10; d++) {
|
|
for (let frames = framesMin; frames < framesMax + 1; frames++) {
|
|
angle = angles[a];
|
|
res = simulate(x, y, frames, angle, distance + d);
|
|
attempts++;
|
|
if (Math.abs(res.x - x) < searchHit && Math.abs(res.y - y) < searchHit && res.angle == angle) {
|
|
console.log(`#${attempts}`);
|
|
console.log(`startx = ${x} endx = ${res.x}`);
|
|
console.log(`starty = ${y} endy = ${res.y}`);
|
|
console.log(`startangle = ${angle}`);
|
|
console.log(`frames = ${frames}`);
|
|
console.log(`distance = ${distance + d}`);
|
|
console.log(`searchHit = ${searchHit}`);
|
|
console.log("++++++++++++++++++++++++++++++++++++++++");
|
|
return res;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
console.timeEnd(`${x},${y}`)
|
|
duration = ((+new Date()) - startTime);
|
|
secondsLeft = (duration / 1000) * (x - (xMax - buffer)) * (y - (yMax - buffer));
|
|
console.log(`Minutes Left: ${Math.round(secondsLeft / 60)}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
function main () {
|
|
let res;
|
|
for (let i = 0; i < 7; i++) {
|
|
res = simulateAll();
|
|
searchHit = Math.floor(searchHit / 2.0);
|
|
if (searchHit === 0) process.exit()
|
|
}
|
|
}
|
|
|
|
main(); |