You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel与JavaScript中ATAN函数计算视角差异问题求助

视角(Angle of View)计算:Excel转JavaScript公式适配问题

我正把Excel表格中的公式转换成简易JavaScript计算器,在视角计算上遇到了问题:

Excel中qhAFOV的计算公式为:2*DEGREES(ATAN(qhF/2*qf)),当qhF = 12; qf = 3.4;时,预期结果应为174.39度,但我编写的JS代码:

var qhAFOV = (2 * Math.atan(qhf / (2 * qf))) * (180 / Math.PI);

得到的结果却是120.92度。我尝试过调整公式,比如:

var qhAFOV = (2 * Math.atan2(2 * qf, qhf)) * (180 / Math.PI);

仍未得到正确结果。已知Excel的ATAN计算方式与JS存在差异,但找不到适配方法,恳请协助解决。

完整JS脚本如下:

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);
    }

另外还尝试过以下代码:

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

内容的提问来源于stack exchange,提问作者MarioFR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:10:38