/** * Вычисляет пересеклись ли два объекта по ААBB формуле в системе координат где ось X идет справа налево, ось Y идет сверху вних * @param {Object} firstObject - первый объект * @param {number} firstObject.left - Min X координата первого объекта * @param {number} firstObject.right - Max X координата первого объекта * @param {number} firstObject.top - Min Y координата первого объекта (ось смотрит вниз) * @param {number} firstObject.bottom - Max Y координата первого объекта * @param {Object} secondObject - второй объект * @param {number} secondObject.left - Min X координата второго объекта * @param {number} secondObject.right - Max X координата второго объекта * @param {number} secondObject.top - Min Y координата второго объекта (ось смотрит вниз) * @param {number} secondObject.bottom - Max Y координата второго объекта * @returns {boolean} */ export function calculateAABBCollision(firstObject, secondObject) { try { const coordinates = [ firstObject.left, firstObject.right, firstObject.top, firstObject.bottom, secondObject.left, secondObject.right, secondObject.top, secondObject.bottom, ]; if (coordinates.some((element) => typeof element !== 'number')) { throw new Error('Координаты должны являться числовыми значениями'); } if ( firstObject.left > firstObject.right || firstObject.top > firstObject.bottom || secondObject.left > secondObject.right || secondObject.top > secondObject.bottom ) { throw new Error('Координаты должны быть корректными'); } return ( firstObject.left <= secondObject.right && firstObject.right >= secondObject.left && firstObject.top <= secondObject.bottom && firstObject.bottom >= secondObject.top ); } catch (err) { console.error(err); return null; } }