如何使用javascript计算太阳下点的纬度(即太阳偏角)?
How to calculate the latitude of the subsolar point (ie. solar declination) using javascript?
我正在尝试使用 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。这可是几百里啊!
我做错了什么?这个近似公式是不是也太"approximate"?
看起来您使用的公式需要以度为单位的值,但 Math.sin
使用弧度。如果你转换它,它给出了大致预期的结果:
function getSolarDeclination(){
return -23.44 * Math.sin( (360 / 365.25) * getDayOfYear() * Math.PI/180 )
}
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
}
console.log(getSolarDeclination())
我正在尝试使用 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。这可是几百里啊!
我做错了什么?这个近似公式是不是也太"approximate"?
看起来您使用的公式需要以度为单位的值,但 Math.sin
使用弧度。如果你转换它,它给出了大致预期的结果:
function getSolarDeclination(){
return -23.44 * Math.sin( (360 / 365.25) * getDayOfYear() * Math.PI/180 )
}
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
}
console.log(getSolarDeclination())