Как правильно сравнивать координаты телефона?

У меня есть система которая записывает координаты телефона в определенное время, и результат выглядит так:
{
    "MakeItJingle": {
        "makeitjingle_reel": [{
            "acceleration_x": -0.7000000000000001,
            "acceleration_y": 0.1,
            "acceleration_z": 0.49999999999999994
        }]
}

acceleration_* - это координата телефона, которая получается отсюда:
window.addEventListener("devicemotion", function (e) {
  SetCurAccel({
    x: e.acceleration.x,
    y: e.acceleration.y,
    z: e.acceleration.z
  })
})

Все записывается хорошо, но вот когда я делаю записанное движение, мне кажется что я повторил его так же, но код говорит что я повторил его вообще не так:
var perfectbetween = 50;
var goodbetween = 45;
var okbetween = 25;
const checkApprox = (num1, num2, epsilon) => {
    return Math.abs(num1 - num2) < epsilon;
}

function convertToJDMove(data) { //чтобы было проще сравнивать
    return Math.round(data * 1e2)
}

//playerMoves.* - координата игрока которая так же получается из devicemotion
//checkApprox(n, n1, n2); n - первое число; n1 - второе число; n2 - максимальная разница между числами, иначе false
var moveRecorded = {
    dst_acceleration_x: convertToJDMove(recordedMoves[window.songcodename][next_move.name][0].acceleration_x),
    dst_acceleration_y: convertToJDMove(recordedMoves[window.songcodename][next_move.name][0].acceleration_x),
    dst_acceleration_z: convertToJDMove(recordedMoves[window.songcodename][next_move.name][0].acceleration_x)
}
var perfect =
    (checkApprox(playerMoves.x, moveRecorded.dst_acceleration_x, perfectbetween) && checkApprox(playerMoves.y, moveRecorded.dst_acceleration_y, perfectbetween) ||
        checkApprox(playerMoves.y, moveRecorded.dst_acceleration_y, perfectbetween) && checkApprox(playerMoves.z, moveRecorded.dst_acceleration_z, perfectbetween) ||
        checkApprox(playerMoves.z, moveRecorded.dst_acceleration_z, perfectbetween) && checkApprox(playerMoves.x, moveRecorded.dst_acceleration_x, perfectbetween)) && playerActive
var good =
    (checkApprox(playerMoves.x, moveRecorded.dst_acceleration_x, goodbetween) && checkApprox(playerMoves.y, moveRecorded.dst_acceleration_y, goodbetween) ||
        checkApprox(playerMoves.y, moveRecorded.dst_acceleration_y, goodbetween) && checkApprox(playerMoves.z, moveRecorded.dst_acceleration_z, goodbetween) ||
        checkApprox(playerMoves.z, moveRecorded.dst_acceleration_z, goodbetween) && checkApprox(playerMoves.x, moveRecorded.dst_acceleration_x, goodbetween)) && playerActive
var ok =
    (checkApprox(playerMoves.x, moveRecorded.dst_acceleration_x, okbetween) && checkApprox(playerMoves.y, moveRecorded.dst_acceleration_y, okbetween) ||
        checkApprox(playerMoves.y, moveRecorded.dst_acceleration_y, okbetween) && checkApprox(playerMoves.z, moveRecorded.dst_acceleration_z, okbetween) ||
        checkApprox(playerMoves.z, moveRecorded.dst_acceleration_z, okbetween) && checkApprox(playerMoves.x, moveRecorded.dst_acceleration_x, okbetween)) && playerActive
if (perfect) console.log("Perfect move")
if (good) console.log("Good move")
if (ok) console.log("Ok move")

Может я неправильно сравниваю? Кто может, помогите пожалуйста
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы