преобразовывать точные азимутальные градусы в человеческие

Я пишу этот фрагмент кода для преобразования азимутальных градусов в удобочитаемые для человека, но преобразование не является более точным, в случаях, когда градусы немного меньше 360.

function azimutHuman(ang) {     //can be 0 - 360

    var azimuthHumans = [
              'Nord','Nord-NE','Nord-Est','Est-NE',
              'Est','Est-SE','Sud-Est','Sud-SE',
              'Sud','Sud-SO','Sud-Ovest','Ovest-SO',
              'Ovest','Ovest-SO','Nord-Ovest','Nord-NO'];

    return azimuthHumans[ Math.round(ang/22.5) ];
}

Например:

azimutHuman(350);   //return undefined instead of "Nord"

person stefcud    schedule 12.02.2014    source источник


Ответы (2)


350 -> 360 = 0->10 : 360 - это север, как и 0 .

поэтому вам нужно снова добавить элемент «Nord». Попробуйте эту функцию сейчас:

function azimutHuman(ang) {     //can be 0 - 360

    var azimuthHumans = [
              'Nord','Nord-NE','Nord-Est','Est-NE',
              'Est','Est-SE','Sud-Est','Sud-SE',
              'Sud','Sud-SO','Sud-Ovest','Ovest-SO',
              'Ovest','Ovest-SO','Nord-Ovest','Nord-NO','Nord'];

    return azimuthHumans[ Math.round(ang/22.5) ];
}
person ImadOS    schedule 12.02.2014

Math.round(350/22.5) = 16 Ваш массив с индексом 16 не определен. Добавьте к нему 16-й элемент, Nord снова должен работать

person Ghost    schedule 12.02.2014