我正在尝试使用javascript计算太阳直接在头顶上方的地球上的点。我的经度功能很好用,但是我在纬度方面遇到了麻烦。
我知道我在寻找什么,叫做太阳偏角,并且近似公式为(source):
δ= 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,而至少根据this site,应该是〜22.465。这是几百英里的距离!
我在做什么错?这个近似公式是否太“近似”?
我正在尝试使用javascript计算太阳直接在头顶上方的地球上的点。我的经度功能很好用,但是我在纬度方面遇到了麻烦。我了解...
类似于您正在使用的公式,期望值以度为单位,但是Math.sin
使用弧度。如果将其转换,它将大致得到预期的结果: