3

我一直在关注本指南,将其移植到 javascript: http: //www.saao.ac.za/public-info/sun-moon-stars/sun-index/how-to-calculate-altaz/

直到 9 点(赤经)和 10 点(赤纬),一切都顺利进行。我无法重新创建他们为这些给出的答案。

(9) 寻找太阳赤经的阿尔法: (a) 开普敦:

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;

正如你所看到的,我正抓着稻草,因为我对此一无所知。任何帮助将非常感激。

4

1 回答 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 的答案相同。

于 2012-11-27T02:59:41.273 回答