白昼时间和日出日没时刻的粗略计算

本文将使用非常理想化的模型粗略地计算白昼时间和正午时刻,并以此算出日出、日没的时间。


怎么算白昼时间?或者说,怎么算白昼时间占一天时间中的比例?算出太阳的周日平行圈(太阳在天球上运动的轨迹)有多大一部分在地平线以上就可以了(忽略太阳一天之内的公转以及地球自转的不均匀)。

想要算出这个比例,需要这两个量:

符号 含义 Why?
( delta ) 太阳赤纬(太阳直射点纬度,北纬为正) 夏天昼长,冬天昼短
( varphi ) 当地纬度(北纬为正) 北极极昼,南极极夜

如图,以北半球冬季为例,把天球、地平线和平行圈画出来,再作几条辅助线,通过几何关系来用 ( delta ) 和 ( varphi ) 表示要求的比例:

设天球的球心为 (O), 半径为 (1), 平行圈的圆心为 (O'), 太阳从 (A) 点升起,从 (B) 点落下,观察者不在极点。连接 (AB), (AO), (AO'), (BO), (BO').

取 (AB) 的中点 (M), 连接 (MO), (MO'). 易知 ( angle{OAO'} = -delta ), ( angle{MOO'} = varphi ).

设 ( angle{MO'A} = heta ), 则所求比例为 ( frac{2 heta}{360^{circ}} = frac{ heta}{180^{circ}} ).

( ecause OO'perp 平面 O'AB )

( herefore OO'perp O'M, OO'perp O'A )

( herefore O'O = sin{(-delta)}, O'A = cos{(-delta)} )

( herefore O'M = O'O cdot an{varphi} = sin{(-delta)} an{varphi} )

( herefore cos{ heta} = frac{O'M}{O'A} = frac{sin{(-delta)} an{varphi}}{cos{(-delta)}} = an{(-delta)} an{varphi} )

( herefore heta = arccos{( an{(-delta)} an{varphi})} )

( herefore frac{ heta}{{180}^{circ}} = frac{arccos{( an{(-delta)} an{varphi})}}{{180}^{circ}} )

得到昼长关于 ( delta ) 和 ( varphi ) 的表达式:

( mathrm{daytime} = frac{arccos{( an{(-delta)} an{varphi})}}{{180}^{circ}} cdot {24}^{mathrm{h}} ) ( (varphi eq pm {90}^{circ}) )

虽然这个式子是从「北半球冬季」这一种情况推出来的,但也适用于南半球和夏季(代入 ( -delta ) 和 ( -varphi ) 容易看出)。

……

那么问题来了:( delta ) 怎么求?还得画个球:

如图,天球的中心是地球,黄道和赤道相交,设春分点为 (E),  秋分点为 (E'), 太阳为 (S), 黄赤交角为 ( varepsilon ), 太阳地心黄经为 ( lambda ).

通过几何关系用 ( varepsilon ) 和 ( lambda ) 表示 ( delta ):

过 (S) 作大圆弧 (SS') 垂直于赤道交赤道于 (S') ( 图示位罝 ).

跟据球面三角形正弦定理,在球面 ( riangle{SES'} ) 中,有:

( frac{sin{(-delta)}}{sin{varepsilon}}=frac{sin{(-lambda)}}{sin{{90}^{circ}}} )

( sin{delta} = sin{lambda}sin{varepsilon} )

( delta = arcsin{(sin{lambda}sin{varepsilon})} )

这个式子也是适用于各种情况的。

……

问题又来了,( lambda ) 怎么求?这就不用画球了,也没球可画了。一是可以直接用轨道参数去算,二是可以先搞到各节气的日期,然后在邻近的两个节气间进行线性插值。

联立以上各式,可得白昼时间关于纬度和太阳黄经的表达式:

( mathrm{daytime} = {24}^{mathrm{h}}cdotfrac{arccos{( an{(-arcsin{(sin{lambda}sin{varepsilon})})} an{varphi})}}{{180}^{circ}} ) ( (varphi eq pm {90}^{circ}) )

( mathrm{daytime} = {24}^{mathrm{h}}cdot(1-frac{arccos{( an{(arcsin{(sin{lambda}sin{varepsilon})})} an{varphi})}}{{180}^{circ}}) ) ( (varphi eq pm {90}^{circ}) )

( mathrm{daytime} = {24}^{mathrm{h}}cdot(1-frac{arccos{frac{sin{lambda}sin{varepsilon} an{varphi}}{sqrt{1-sin^2{lambda}sin^2{varepsilon}}}}}{{180}^{circ}}) ) ( (varphi eq pm {90}^{circ}) )

北纬 ( {36.5}^{circ} ) 的白昼时间关于太阳黄经的变化情况如下图:


 看起来特别像正弦曲线,尝试拟合一下:

( mathrm{daytime} approx {12}^{mathrm{h}} cdot [(1-frac{arccos{( an{varepsilon} an{varphi})}}{{90}^{circ}})cdot sin{lambda} + 1] ) ( (varphi eq pm {90}^{circ}) )

看看误差:

最大误差 ( pm 6 mathrm{min} ), 效果比较一般,表达式也没简化多少,看来还是得用原式。


有了白昼时间,日出日没时刻可用下面两式计算:

( T_{sunrise} = T_{noon} - frac{mathrm{daytime}}{2} ) (1)

( T_{sunset} = T_{noon} + frac{mathrm{daytime}}{2} ) (2)

问题又来了,正午 ( T_{noon} ) 不一定是 12:00:

首先,区时和地方时之间有可能会差不少,这会导致正午时刻偏离 12:00.

其次,由于太阳运动的不均匀(均時差),正午时刻也会偏离 12:00.

这两个效应会叠加。第一个问题好解决,只要知道时区中央经线的经度和当地的经度,就万事大吉了。第二个就不大好算了。《天文算法》中给出了一个近似公式(我把高阶项都扔掉了):

( E' = T_{mean}-T_{true} = 4 cdot [ an^2{(frac{varepsilon}{2})}cdot sin{2L}+2ecdot sin{(L-varpi)} ] ) ( E' 的单位为分钟 )

其中 (L) 为太阳平黄经(即平太阳黄经,(假想的)平太阳以一个回归年为周期在黄道上做匀速圆周运动。可以近似地认为它等于上个春分和今天之间差的天数(或再乘以平太阳的角速度 ( frac{{360}^{circ}}{{365.2422}^{mathrm{d}}} ) )),(e) 为地球轨道离心率,( varpi ) 为地球近日点(日心)黄经。(e approx 0.0167 ) 和 ( varpiapprox {102.982}^{circ} ) 在短时间内可看作常数。

作图((E) 关于 (L) 的变化情况):

现在要求正午时间,令 ( T_{true} = 12:00 ), 解得:

( T_{mean}=12:00+E' )

补上区时和地方时的偏差,最终得到:

 ( T_{noon}=12:00 + 4^{mathrm{m}}cdot(L_{zone}-L_{local}) + 4^{mathrm{m}} cdot [ an^2{(frac{varepsilon}{2})}cdot sin{2L}+2ecdot sin{(L-varpi)} ] )

其中 ( L_{zone} ) 和 ( L_{local} ) 分别为时区中央经线的经度和当地的经度(东经为正)。

至此,大功告成,用 (1) 和 (2) 计算日出日没就可以了。

原文地址:https://www.cnblogs.com/li-hua/p/5593648.html