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

2 番目の式では、コサインを使用してからサインに変更しました。

さて、一見すると同じ結果にはならないので、もう少し掘り下げてみましょう。わかりやすくするために、次の関数と定数を使用します。

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 に答える