Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.12.2019, 23:29
Аватар для Georgie0409
Новичок на форуме
Отправить личное сообщение для Georgie0409 Посмотреть профиль Найти все сообщения от Georgie0409
 
Регистрация: 08.12.2019
Сообщений: 6

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}
]
Ответить с цитированием
  #2 (permalink)  
Старый 13.12.2019, 00:08
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,126

Ищи что такое

1. векторная аглебра
2. Разница векторов
3. Длина вектора
Ответить с цитированием
  #3 (permalink)  
Старый 13.12.2019, 01:06
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Georgie0409,
Здесь обычная теорема Пифагора, просто добавится еще одно измерение. Длины векторов по ней находятся, чем длина короче, тем ближе.
alert(Math.min(Math.hypot(2000-2500,1000-1200,500-600),Math.hypot(2000-2300,1000-1200,500-490)))
Ответить с цитированием
  #4 (permalink)  
Старый 13.12.2019, 13:09
Аватар для Georgie0409
Новичок на форуме
Отправить личное сообщение для Georgie0409 Посмотреть профиль Найти все сообщения от Georgie0409
 
Регистрация: 08.12.2019
Сообщений: 6

Привет, спасибо, вроде бы получилось.
Хотел спросить ещё, как узнать под каким номером в массиве находятся самые близкие ко мне координаты? Я понимаю, что надо сделать через цикл к примеру for, но как именно в данном случае?
Ответить с цитированием
  #5 (permalink)  
Старый 13.12.2019, 14:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

поиск индекса ближайшей точки
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);

Последний раз редактировалось рони, 14.12.2019 в 13:58.
Ответить с цитированием
  #6 (permalink)  
Старый 14.12.2019, 13:42
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

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);
Ответить с цитированием
  #7 (permalink)  
Старый 14.12.2019, 13:45
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

рони,
Что-то не сходится у тебя индекс 2, а у меня 1 видимо, кто не прав?
Ответить с цитированием
  #8 (permalink)  
Старый 14.12.2019, 14:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от Rise
Что-то не сходится у тебя индекс 2, а у меня 1 видимо, кто не прав?
исправил опечатку у себя в 7 строке, пост #5. сейчас тоже 1.
Ответить с цитированием
  #9 (permalink)  
Старый 14.12.2019, 14:09
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

рони,
Ага, позже заметил что z забыл.
Ответить с цитированием
  #10 (permalink)  
Старый 19.12.2019, 09:56
Новичок на форуме
Отправить личное сообщение для X-Clusiv Посмотреть профиль Найти все сообщения от X-Clusiv
 
Регистрация: 19.12.2019
Сообщений: 8

Сообщение от Georgie0409 Посмотреть сообщение
Уж извините, если не сюда написал)

Мне надо сделать так, чтобы сравнило мои координаты с другими координатами, и нашло самые ближайшие ко мне, а затем вывело их в консоль. Мои координаты находятся в переменной 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}
]
Ragemp привет)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка формы только после выбора select Zaratustra AJAX и COMET 47 11.09.2016 10:50
Парни кто знает как... dezytube Элементы интерфейса 0 25.08.2016 18:27
Помогите кто нибудь? Refix Работа 3 18.05.2016 19:41
Подскажите кто знает. linkin-89 jQuery 3 21.03.2011 21:51
Привязка картинки к углу ячейки таблицы! Помогите с кодом! Alexofer Общие вопросы Javascript 6 31.12.2008 00:14