Попытка написать эту функцию Excel в JS, но пень на модульной части - PullRequest
2 голосов
/ 17 января 2020

Вот функция Excel, и она отлично работает в Excel.

lng = mod(lng1-asin(sin(tc1)*sin(d)/cos(lat))+pi,2*pi)-pi

Я пытаюсь преобразовать ее в JavaScript, у меня это пока, но это не так работает.

    x = lng1-Math.asin(Math.sin(tc1)*Math.sin(d));
    y = Math.asin(Math.cos(lat)+Math.PI,2*Math.PI);
    n = (x % y)-Math.PI ;

Я передаю координаты в радианах (и проверил, что они правильные, как в примере ниже), но просто не могу понять, почему это дает мне NaN

TIA для помощь

Стив

Это обработанный пример (отсюда https://edwilliams.org/avform.htm#Intermediate)

         = mod(2.066470- asin(sin(1.150035)*sin(0.0290888)/cos(0.604180))+pi,2*pi)-pi
         = mod(2.034206+pi,2*pi)-pi radians
         = 2.034206 radians
         = 116 degrees 33min```

1 Ответ

3 голосов
/ 17 января 2020

В вашей конверсии были допущены незначительные ошибки конверсии. Чтобы код работал правильно, ниже мое решение:

const result = lng1 - Math.asin((Math.sin(tc1) * Math.sin(d)) / Math.cos(lat)) +  Math.PI % (2 * Math.PI) - Math.PI;

Решение может выглядеть немного длинным, но оно функционирует так же, как обычно, и завершает операцию в точном порядке.

Учитывая, что:

let lng1 = 2.06647;
let tc1 = 1.150035;
let d = 0.0290888;
let lat = 0.60418;

Код будет выполнен, и конечная константа с именем result будет иметь значение 2.0342057088546213 или около 2.034206, в радианах . Если требуется преобразование в градусы, просто умножьте результат на коэффициент 57,295779513082, поскольку 1 радиан равен 57,295779513082 градусам .

...