4

计算日出/日落时如何考虑观察者海拔?

计算任何纬度/经度的日出/设置是没有问题的,但是如何计算海拔而不是海平面???我已经用完了可以尝试的组合,并且花了三天多的时间来寻求帮助

我正在使用 Paul Schlyter 的优秀公共领域 C 源代码,这似乎是最常见的。它确实可以让你设置“太阳应该穿过的高度”,例如 -12 表示航海暮光或 -35/60 等,但我不确定如何修改它以考虑观察者海拔高度。

例如,厄瓜多尔的基多是海拔 2850 米的最高城市之一。
纬度+经度:-78.46784,-0.18065
时区:-5
海拔:2850m

使用卡西欧的计算器(http://keisan.casio.com/exec/system/1224686065),我发现少数几个可以解释海拔高度的计算器之一,它返回以下内容(日期=2017 年 1 月 1 日):
日出=6 :14 Sunset=18:22 Elevation=0m <-我已经可以得到这个
Sunrise=6:05 Sunset=18:30 Elevation=2850m <-但我怎么能得到这个?

我可以通过设置 Altitude=-35/60 (-0.58333) UpperLimb=1.0 获得第一个 (elev=0) 但是如何获得第二个?

我正在使用以下功能:

int sunriset( int year, int month, int day, double lon, double lat,
                  double altit, int upper_limb, double *trise, double *tset )
/*************************************************************/
/* altit = the altitude which the Sun should cross           */
/*         Set to -35/60 degrees for rise/set, -6 degrees    */
/*         for civil, -12 degrees for nautical and -18       */
/*         degrees for astronomical twilight.                */
/* upper_limb: non-zero -> upper limb, zero -> center        */
/*         Set to non-zero (e.g. 1) when computing rise/set  */
/*         times, and to zero when computing start/end of    */
/*         twilight.                                         */
/**************************************************************/

SUNRISE.C(我已经制作了这个 READY-TO-RUN 示例):使用硬编码的 Quito lat/long/etc:https ://pastebin.com/XSWR2Hby 编译:gcc sunrise.c -o sunrise.exe

4

1 回答 1

0

假设环境不高,即在山上,而不是在大高原上,您可以首先计算由与地球表面切线相接触的所有点形成的圆,这些点通过兴趣点(基多)然后在这个圆上找到最早的日出和最晚的日落。如果太阳照在这个圆圈的任何部分,它也会照在感兴趣的点上。

在高原上,我认为您不需要做任何事情(如果基多在高原上,这意味着卡西欧是错误的),因为正确的做法是为具有更大半径或直径的地球进行计算但在保罗的代码中没有变量。据推测,行星大小的影响太小而无法相关,并且假设到达地球的太阳光线是平行的(事实并非如此)。

于 2017-07-07T10:50:24.360 回答