equation - 在计算日出/日落时如何考虑观察者的高度?

标签 equation calculation solar

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

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

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

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

使用 Casio 的计算器 (http://keisan.casio.com/exec/system/1224686065),这是我发现的少数可以解释海拔的计算器之一,它返回以下内容(日期=2017 年 1 月 1 日):
日出=6:14 日落=18:22 海拔=0m <- 我已经可以得到这个
日出=6:05 日落=18:30 海拔=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(我已经制作了这个准备运行的示例):硬编码基多纬度/经度/等:https://pastebin.com/XSWR2Hby
编译:gcc sun.c -o sun.exe

最佳答案

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

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

关于equation - 在计算日出/日落时如何考虑观察者的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44966097/

相关文章:

c# - 加密文件大小的计算与真实大小不匹配

java - Hibernate 搜索查找短语的部分匹配

python - 无法协调 PVLIB 输出与 NREL SAM

python - 将符号方程解析为 Sympy 函数

python - 在 python 中计算复杂的数学方程式

latex -\right) 不适用于 LaTeX 多行方程

pvlib - 导入天气数据时出现双面辐射错误

Python/Pandas/Dataframe/计算日期差异

java - 其他类的方法和 toString() 的使用

c++ - 在C++中从二进制转换为十进制数