Самая основная
function setIntegrator(variation = null) {
const workerData = variation ? {...TEST_DATA, variation } : TEST_DATA
const integrator = new Worker(PHYSICS_PATH, { workerData })
return new Promise(resolve => {
integrator.on('message', (data) => {
resolve(data)
integrator.unref()
})
})
}
async function testRun(variationRange = []) {
const hasVariants = variationRange.length > 0
const integratorPool = variationRange.length ? variationRange.map(v => setIntegrator(v)) : [setIntegrator()]
const res = await Promise.all(integratorPool)
res.forEach((resData, index) => {
const keyPrm = hasVariants ? variationRange[index].key : 'basic'
fs.writeFile(`./result_reentry_${keyPrm}.txt`, resData)
})
}
(еще есть ответная магия в исполняемом воркере, но она скучная)
А это—выдаваемые резалт. Срез по высоте/дальности глиссирования. В самой нижней точке можно представить, как двадцатитонная туша из нержавейки, отсвечивающая по краям тускло-вишневым, с мультяшным звуком "пинг" отскакивает от плотных слоев атмосферы. И да, я бы эти четыре варианта ручками подбирал бы минут 40.
![](https://diary.ru/resize/-/-/3/4/9/0/3490566/udySq.gif)