0

したがって、この方程式を実行するための次のコードがあります。

(1 / 15) * arccos(-tan(L) * tan(23.44 * sin(360 * (D + 284) / 365))) 

テスト目的で警告します!しかし、何らかの理由で「NaN」を返します。私はおそらく本当にばかげたことをしました:P

var now = new Date();
var start = new Date(now.getFullYear(), 0, 0);
var diff = now - start;
var oneDay = 1000 * 60 * 60 * 24;
var d = Math.floor(diff / oneDay);


var lat = position.coords.latitude;
var long = position.coords.longitude;
var tanlat = Math.atan(lat); 
var tantwentythree = Math.tan(23.44);
var dayplus = d + 284;
var sinday = Math.sin(360 * dayplus);
var arccos = Math.acos(tanlat);
var start = 1 / 15;
var equation = start * arccos * tantwentythree * sinday / 365;
alert(equation);


var result = rad2deg / 15 * Math.acos(-Math.tan(lat*deg2rad) * Math.tan(23.44*deg2rad * Math.sin(360*deg2rad * (day + 284) / 365)));
alert(result);
var resultstr = string(result);
document.getElementById('sunrise').innerHTML = resultstr;

関数が実行されると、var resultstr を追加する必要があります (私は思いますか?) しかし、私はしません!

4

1 に答える 1

0

多分あなたが欲しかった

tanlat= Math.tan(lat)

Math.atan(lat)どちらが逆ではない...

しかし、別の問題があります。三角関数のすべての引数は、度数ではなくラジアンでなければなりません。度を掛ける必要がありますMath.PI / 180

しかし、その後、さらに多くの問題が発生します。は必要な数量ではありません。まず、製品のtan(23.44)が必要です。tan

私がすることは、ラジアン変換に度数のみを追加して、数式をそのまま使用することです。

var deg2rad = Math.PI / 180;
var rad2deg = 180 / Math.PI;
var result = rad2deg / 15 * Math.acos(-Math.tan(lat*deg2rad) *
             Math.tan(23.44*deg2rad * Math.sin(360*deg2rad * (d + 284) / 365)))
于 2013-10-22T21:45:19.530 に答える