我得到了一个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条答案
按热度按时间ars1skjm1#
这看起来是一个非常简单的操作顺序问题。在Excel中,您正在计算:
2*DEGREES(ATAN(qhF/2*qf))
这里的问题是qhF/2*qf
。这被解释为(qhF/2)*qf
。但是在你的JavaScript中,你有额外的括号:qhf / (2 * qf))
。将这些值输入计算器可以证实这一点。考虑到您在JavaScript中添加了额外的括号,我假设您打算计算qhf / (2 * qf))
,这意味着120.92实际上是正确的值。在Excel公式中添加额外的括号应该可以解决这个问题(即。2*DEGREES(ATAN(qhF/(2*qf)))
)。