const MAX_NUMBER = 100
const MIN_NUMBER = 0
let probes = []
export const getRandomNumber = (min, max) => {
return Math.floor(Math.random() * (max - min + 1)) + min;
};
export const getRandomCoordinates = () => {
return {
x: getRandomNumber(MIN_NUMBER, MAX_NUMBER),
y: getRandomNumber(MIN_NUMBER, MAX_NUMBER),
z: getRandomNumber(MIN_NUMBER, MAX_NUMBER),
}
};
export const createAsteroid = () => {
return getRandomCoordinates()
};
export const getDistanceBetweenPoints = (point1, point2) => {
const { x: x1, y: y1, z: z1 } = point1;
const { x: x2, y: y2, z: z2 } = point2;
//Я просто оставлю эту формулу тут что бы кто-то немножко повеcелел от увиденного
// Что бы долго не вникать я расписал формулу (a- b)^2 как a^2 - 2ab + b^2
// const distance = Math.pow(x1, 2) - 2 * x1 * x2 + Math.pow(x2, 2) + Math.pow(y1, 2) - 2 * y1 * y2 + Math.pow(y2, 2) + Math.pow(z1, 2) - 2 * z1 * z2 + Math.pow(z2, 2)
const distance = Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2) + Math.pow(z1 - z2, 2)
return Math.sqrt(distance);
}
const addProbeAndGetDistance = (probe, asteroid) => {
probes.push(probe)
return getDistanceBetweenPoints(asteroid, probe)
}
export const findAsteroidLocation = () => {
const asteroid = createAsteroid()
const d0 = addProbeAndGetDistance({ x: 0, y: 0, z: 0 }, asteroid)
const dx = addProbeAndGetDistance({ x: 1, y: 0, z: 0 }, asteroid)
const dy = addProbeAndGetDistance({ x: 0, y: 1, z: 0 }, asteroid)
const dz = addProbeAndGetDistance({ x: 0, y: 0, z: 1 }, asteroid)
//Тут так как у меня вернулись не квадраты расстояния, я рассписал d0 ^2- dn^2 как (d0 - dn) * (d0 + dn)
const asteroid_x = Math.round(((d0 - dx) * (d0 + dx) + 1) / 2)
const asteroid_y = Math.round(((d0 - dy) * (d0 + dy) + 1) / 2)
const asteroid_z = Math.round(((d0 - dz) * (d0 + dz) + 1) / 2)
console.log(asteroid);
console.log(`x: ${asteroid_x}, y: ${asteroid_y}, z: ${asteroid_z}`);
const result = { x: asteroid_x, y: asteroid_y, z: asteroid_z }
return { probes, location: result }
}