Назначение - поиск ближайшей точки на самолете. Javascript - PullRequest
0 голосов
/ 04 августа 2020

У меня есть задание, над которым я работаю, и я немного застрял ... Я думаю, что я на правильном пути, но это продолжает возвращать undefined.

EDIT: цель - пройти в массиве из двух точек и найдите, что в исходном массиве ближе.

Любые указания с некоторыми пояснениями были бы очень признательны.

function calcDistance(x1, y1, x2, y2) {
    return Math.sqrt(Math.pow(x1 - y1, 2) + Math.pow(x2 - y2, 2));
}

function minimumDistance(inputArray, destArray) {
    let inputX = inputArray.x;
    let inputY = inputArray.y;
    let minDistance = calcDistance(inputX, inputY, destArray[0].x, destArray[0].y)
    let minPoint;

    for (let i = 0; i < destArray.lenght; i++) {
        let distance = calcDistance(inputX, inputY, destArray[i].x, destArray[i].y);
        if (minDistance > distance) {
            minDistance = distance;
            minPoint = i;
        }
        return destArray[minPoint];
    }
}


testData = { x: 0, y: 0 }
sourceArr = [{ x: 100, y: 0 }, { x: 200, y: 10 }]

console.log(minimumDistance(testDatac, sourceArr));

Ответы [ 4 ]

1 голос
/ 04 августа 2020

Могу предположить, что вы хотите что-то вроде этого.

// Calculate euclidean distance between a and b (which should be objects with x/y properties)
function euclideanDistance(a, b) {
  return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2));
}

// Find an object `x` in `otherPoints` that minimizes `metric(point, x)`
function minimumDistance(point, otherPoints, metric) {
  let minDistance, minPoint;
  otherPoints.forEach((otherPoint) => {
    const distance = metric(point, otherPoint);
    if (minDistance === undefined || distance < minDistance) {
      minDistance = distance;
      minPoint = otherPoint;
    }
  });
  return [minPoint, minDistance];
}

testSrc = { x: 0, y: 0 };
testArr = [
  { x: 100, y: 0 },
  { x: 200, y: 10 },
];

console.log(minimumDistance(testSrc, testArr, euclideanDistance));
1 голос
/ 04 августа 2020

Я не совсем уверен, чего вы пытаетесь достичь, но вот некоторые изменения, которые я внес:

  1. начало minDistance на + Infinity, а затем l oop по всем точкам ( в качестве альтернативы, инициализация minPoint на 0 делает то же самое)
  2. исправить опечатку lenght => length
  3. переместить оператор return после l oop (чтобы программа могла проверить все точки перед возвратом значения )
  4. Исправьте функцию calcDistance, чтобы использовать правильную формулу (sqrt((x2-x1)**2 + (y2-y1)**2))

function calcDistance(x1, y1, x2, y2) {
    return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
}

function minimumDistance(inputArray, destArray) {
    let inputX = inputArray.x;
    let inputY = inputArray.y;
    let minDistance = +Infinity;
    let minPoint;

    for (let i = 0; i < destArray.length; i++) {
        let distance = calcDistance(inputX, inputY, destArray[i].x, destArray[i].y);
        if (minDistance > distance) {
            minDistance = distance;
            minPoint = i;
        }
    }
    return destArray[minPoint];
}


testSrc = { x: 0, y: 0 }
testArr = [{ x: 100, y: 0 }, { x: 200, y: 10 }]

console.log(minimumDistance(testSrc, testArr));

testSrc = { x: 200, y: 80 }

console.log(minimumDistance(testSrc, testArr));
0 голосов
/ 04 августа 2020

Почти да! Я исправил несколько опечаток, и вы опустили по умолчанию minPoint на 0

function calcDistance(x1, y1, x2, y2) {
    return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
}

function minimumDistance(inputObject, destArray) {
    let inputX = inputObject.x;
    let inputY = inputObject.y;
    let minDistance = calcDistance(inputX, inputY, destArray[0].x, destArray[0].y);
    let minPoint = 0;

    for (let i = 1; i < destArray.length; i++) {
        let distance = calcDistance(inputX, inputY, destArray[i].x, destArray[i].y);
        if (minDistance > distance) {
            minDistance = distance;
            minPoint = i;
        }
    }
    return destArray[minPoint];
}

testSrc = { x: 0, y: 0 };
testArr = [{ x: 100, y: 0 }, { x: 200, y: 10 }]

console.log(minimumDistance(testSrc, testArr));
0 голосов
/ 04 августа 2020

Вы инициализируете minDistance расстоянием от первой точки до inputArray, а затем сравниваете с этим все остальные расстояния. Это отлично работает, если вы также инициализируете minPoint равным 0.

В текущей программе вы должны вводить ifstatement только в том случае, если ваше первое расстояние не является наименьшим в целом.

Чтобы исправить это: инициализировать minPoint к 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...