计算太阳的赤经和赤纬

3
我一直在按照这篇指南进行操作,将其转换为JavaScript代码:http://www.saao.ac.za/public-info/sun-moon-stars/sun-index/how-to-calculate-altaz/。在第9步(赤经)和第10步(赤纬)时,我无法复现他们给出的答案。在(a)开普敦找到太阳的赤经alpha:
lambda = 326.186
epsilon = 23.4396
alpha = arctan (tan(lambda) x cos(epsilon)) // in same quadrant as lambda

// THEIR RESULT
alpha = 328.428

// MY RESULT
var DEGREES = function (val) {
    return val / (Math.PI / 180);
};
var alpha = Math.atan(Math.tan(lambda) * Math.sin(epsilon));
alpha = 0.495;
alpha = DEGREES(0.495) = 28.39;

我也尝试了以下方法:

var alpha = Math.atan2(Math.tan(lambda) * Math.sin(epsilon), lambda);
alpha = DEGREES(result) = 1.321;

差得远呢!

还有第10条(a),即偏角。

delta = arcsin (sin(lambda) x sin(epsilon))

// THEIR RESULT
(a) delta = -12.789

// MY RESULT
var result =  Math.asin(Math.sin(eclipticLong) * Math.sin(obliq));
result =  DEGREES(result);
result = -10.966;

如您所见,我现在有些不知所措,并没有很清楚这方面的知识。非常感谢您提供帮助。

1个回答

3

嗯,我看到的最大问题在这里:

alpha = arctan (tan(lambda) x cos(epsilon)) // in same quadrant as lambda
...
var alpha = Math.atan(Math.tan(lambda) * Math.sin(epsilon));

您在第二个表达式中从余弦函数转换为正弦函数。

表面上看,这样做并不能得到相同的结果,因此让我们深入挖掘一下。为了清晰明了,我将使用这些函数和常量:

var lambda = 326.186;
var epsilon = 23.4396;
function rad (v) { return v * Math.PI / 180 }
function deg (v) { return v * 180 / Math.PI }

JavaScript数学函数采用径向坐标,让我们尝试一下:

var result = deg(Math.atan(Math.tan(rad(lambda)) * Math.cos(rad(epsilon)))); 
console.log(result); // -.31.5717

由于度数的奇妙运算,这个答案与 360 + -31.5717 = 328.428 相同。


非常好,你的解决方案完美地解决了问题。非常感谢!我会采用程序员夜间工作的老借口来解释余弦/正弦错误!我对你的答案进行了一个修饰,添加了以下内容:var Y = deg(Math.cos(epsilon) * Math.sin(lambda)); 取自这个有用的指南 var X = deg(Math.cos(lambda)); 如果 (X < 0) { result = 180 + result; } else if (Y < 0 && X > 0) { result = 360 + result; } - techjacker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接