我一直在关注本指南,将其移植到javascript: http://www.saao.ac.za/public-info/sun-moon-stars/sun-index/how-to-calculate-altaz/
一切都在游泳直到9.(右上升)和10.(赤纬)。我不能重新给出他们给出的答案。
(9)找到正确的太阳升起的alpha: (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;
你可以看到我抓着稻草,因为我对此并不十分了解。任何帮助将不胜感激。
答案 0 :(得分: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的答案相同。