如何使用javascript计算次极点的纬度(即太阳赤纬)?

如何使用javascript计算次极点的纬度(即太阳赤纬)?,javascript,astronomy,Javascript,Astronomy,我正在尝试使用javascript计算地球上太阳正上方的点。我的经度函数工作得很好,但我的纬度有问题 我知道我要寻找的是所谓的太阳赤纬,一个近似公式是: δ=23.45*sin[(360/365)(284+N)] 其中N是一年中的一天,其中1月1日是1日,2月1日是32日,以此类推 这是我现在使用的函数: function getSolarDeclination(){ return -23.44 * Math.sin( (360 / 365.25) * getDayOfY

我正在尝试使用javascript计算地球上太阳正上方的点。我的经度函数工作得很好,但我的纬度有问题

我知道我要寻找的是所谓的太阳赤纬,一个近似公式是:

δ=23.45*sin[(360/365)(284+N)]

其中N是一年中的一天,其中1月1日是1日,2月1日是32日,以此类推

这是我现在使用的函数:

    function getSolarDeclination(){
        return -23.44 * Math.sin( (360 / 365.25) * getDayOfYear() )
    }

    function getDayOfYear(){
        var now = new Date();
        var start = new Date(now.getFullYear(), 0, 0);
        var diff = now - start;
        var oneDay = 1000 * 60 * 60 * 24;
        var dayOfYear = Math.floor(diff / oneDay);
        return dayOfYear + 284
    }
然而,这似乎并没有给我正确的数字。对于今天,2020年6月3日,我得到17.607657911890687,而至少根据它应该是22.465。这有几百英里远


我做错了什么?这个近似公式太“近似”了吗?

看起来您使用的公式需要以度为单位的值,但是
Math.sin
使用弧度。如果对其进行转换,则大致得出预期结果:

函数getSolarDeclination(){ return-23.44*Math.sin((360/365.25)*getDayOfYear()*Math.PI/180) } 函数getDayOfYear(){ var now=新日期(); var start=newdate(now.getFullYear(),0,0); var diff=现在-开始; var一天=1000*60*60*24; var dayOfYear=数学下限(差异/一天); 返回年份天数+284 }
log(getSolarDeclination())就是这样!也许只有几英里远,这对我来说已经足够了。非常感谢。