mp.Vector3 Помогите, кто знает)
Уж извините, если не сюда написал)
Мне надо сделать так, чтобы сравнило мои координаты с другими координатами, и нашло самые ближайшие ко мне, а затем вывело их в консоль. Мои координаты находятся в переменной myPos. А координаты других людей в массиве otherPosition; myPos = {x: 2000, y: 1000, z: 500}; otherPosition = [ {x: 2500, y: 1200, z: 600}, {x: 2300, y: 1200, z: 490}, {x: 2150, y: 1400, z: 400} ] |
Ищи что такое
1. векторная аглебра 2. Разница векторов 3. Длина вектора |
Georgie0409,
Здесь обычная теорема Пифагора, просто добавится еще одно измерение. Длины векторов по ней находятся, чем длина короче, тем ближе. alert(Math.min(Math.hypot(2000-2500,1000-1200,500-600),Math.hypot(2000-2300,1000-1200,500-490))) |
Привет, спасибо, вроде бы получилось.
Хотел спросить ещё, как узнать под каким номером в массиве находятся самые близкие ко мне координаты? Я понимаю, что надо сделать через цикл к примеру for, но как именно в данном случае? |
поиск индекса ближайшей точки
Georgie0409,
const myPos = {x: 2000, y: 1000, z: 500}, otherPosition = [ {x: 2500, y: 1200, z: 600}, {x: 2300, y: 1200, z: 490}, {x: 2150, y: 1400, z: 400} ], index = otherPosition.reduce(({min, index}, {x,y,z}, i) => { const temp = Math.hypot(myPos.x-x,myPos.y-y,myPos.z-z) if(temp < min) {min = temp, index = i}; return {min, index} }, {min : Number.POSITIVE_INFINITY}).index; alert(index); |
Georgie0409,
Описал более явно векторность (по MallSerg), что откуда берется, и сделал соответствия (map) расстояние-координаты. class Vector3D { constructor(x, y, z) { this.x = x; this.y = y; this.z = z; } get length() { return Math.hypot(this.x, this.y, this.z); } subtract(vector) { return new Vector3D(this.x - vector.x, this.y - vector.y, this.z - vector.z); } } let OA = new Vector3D(2000, 1000, 500); let OB = new Vector3D(2500, 1200, 600); let OC = new Vector3D(2300, 1200, 490); let OD = new Vector3D(2150, 1400, 400); let positionVectors = [OB, OC, OD]; /* let BA = OA.subtract(OB); let CA = OA.subtract(OC); let DA = OA.subtract(OD); let distanceVectors = [BA, CA, DA]; console.log(Math.min(BA.length, CA.length, DA.length)); */ let mapByLength = new Map(positionVectors.map((OX) => [OA.subtract(OX).length, OX] )); let minLength = Math.min(...mapByLength.keys()); let minPosition = mapByLength.get(minLength); console.log(minLength, minPosition); |
рони,
Что-то не сходится у тебя индекс 2, а у меня 1 видимо, кто не прав? |
Цитата:
|
рони,
Ага, позже заметил что z забыл. |
Цитата:
|
Часовой пояс GMT +3, время: 09:59. |