Javascript вычисляет функцию ATAN иначе, чем Excel

Мне дали таблицу Excel с парой формул, которые мне нужно было перевести в простой калькулятор Javascript. У меня проблемы с углом обзора.

Формула Excel для qhAFOV=2*DEGREES(ATAN(qhF/2*qf))Если

      qhf = 12;
qf = 3.4; 

Результат должен быть 174,39 . (градусы, если это важно) Вместо этого я продолжаю получать результат 120,92.

Это моя строка JS:var qhAFOV = (2 * Math.atan(qhf / (2 * qf))) * (180 / Math.PI);

И весь небольшой скрипт:

      function calculateFocalLengthLS() {
      // Get input values
      var qf = parseFloat(document.getElementById('qf').value);
      var qIC = parseFloat(document.getElementById('qic').value);
      var qvFOV = parseFloat(document.getElementById('qvfov').value);
      var qhN = parseFloat(document.getElementById('qhn').value);
      var qvN = parseFloat(document.getElementById('qvn').value);
      var qP = parseFloat(document.getElementById('qp').value);

      // Validate inputs
      if (isNaN(qf) || isNaN(qIC) || isNaN(qvFOV) || isNaN(qhN) || isNaN(qvN) || isNaN(qP)) {
        alert('Please enter valid values for all input fields.');
        return;
      }

      // Calculate sensor sizes
      var qhS = qhN * qP;
      var qvS = qvN * qP;
      var qdS = Math.sqrt(Math.pow(qhS, 2) + Math.pow(qvS, 2));

      // Calculate frame sizes
      var qhf = Math.min(qIC, qhS);
      var qvf = Math.min(qIC, qvS);
      var qdf = Math.min(qIC, qdS);

      // Calculate angle of view
      var qhAFOV = (2 * Math.atan(qhf / (2 * qf))) * (180 / Math.PI);
      var qvAFOV = (2 * Math.atan(qvf / (2 * qf))) * (180 / Math.PI);
      var qdAFOV = (2 * Math.atan(qdf / (2 * qf))) * (180 / Math.PI);

      // Display results
      document.getElementById('qhs').value = qhS.toFixed(2);
      document.getElementById('qvs').value = qvS.toFixed(2);
      document.getElementById('qds').value = qdS.toFixed(2);
      document.getElementById('qhf').value = qhf.toFixed(2);
      document.getElementById('qvf').value = qvf.toFixed(2);
      document.getElementById('qdf').value = qdf.toFixed(2);
      document.getElementById('qhafov').value = qhAFOV.toFixed(2);
      document.getElementById('qvafov').value = qvAFOV.toFixed(2);
      document.getElementById('qdafov').value = qdAFOV.toFixed(2);
    }

Я нашел в Интернете, что Excel каким-то образом рассчитывает ATAN по-другому, но я не могу понять, как отразить это в моем сценарии.

Пожалуйста, помогите.

Я попытался изменить формулу наvar qhAFOV = (2 * Math.atan2(2 * qf, qhf)) * (180 / Math.PI);

и

      var hF = 12; // Replace with your actual value of qhF
var f = 3.4; // Replace with your actual value of qf

var angleInRadians = Math.atan2(qhF / (2 * qf), 1);
var angleInDegrees = 2 * (angleInRadians * (180 / Math.PI));

console.log(angleInDegrees); // Also wrong result

1 ответ

Это выглядит довольно простой задачей порядка операций. В Excel вы рассчитываете:2*DEGREES(ATAN(qhF/2*qf))проблема здесь в томqhF/2*qf. Это интерпретируется как(qhF/2)*qf. Но в вашем javascript есть дополнительные скобки: . Ввод значений в калькулятор подтверждает это. Учитывая, что вы добавили дополнительные скобки в JavaScript, я предполагаю, что вы намеревались вычислитьqhf / (2 * qf)), что означает, что 120,92 на самом деле является правильным значением. Надеемся, что добавление дополнительных скобок в формулу Excel должно устранить несоответствие (т.2*DEGREES(ATAN(qhF/(2*qf)))).

Другие вопросы по тегам