2017-07-07 48 views
3

在計算日出/日落時如何計算觀察者仰角?在計算日出/日落時如何考慮觀察者的高程?

計算任何緯度/經度的日出/設置是沒有問題的,但是如何計算海拔而不是海平面?我已經用完了三天的組合,並且花了三天時間在這裏,我正在努力尋求幫助。

我使用Paul Schlyter出色的公共領域C源代碼,這似乎是最常見的。它可以讓你設置「太陽應該穿越的高度」,例如-12爲航海暮光或-35/60等,但我不知道如何修改這個以考慮到海平面以上的觀察員海拔。

例如,厄瓜多爾基多是海拔2850米的最高城市之一。
緯度+經度:-78.46784,-0.18065
區:-5
海拔高度:2850米

使用卡西歐計算器(http://keisan.casio.com/exec/system/1224686065),爲數不多的我發現,不考慮高程之一,它返回以下的(日期= 2017年1月1日):
日出= 6:14日落= 18:22。海拔=0米< - 我已經可以得到這個
日出= 6:05日落= 18:30。海拔=2850米< - 但我怎麼能得到這個?

我能夠獲得通過設置高度= -35/60(-0.58333)上肢= 1.0 可是如何才能讓第二個是第一個(海拔= 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爲例):通過硬編碼基多/緯的/ etc:https://pastebin.com/XSWR2Hby 編譯:gcc sunrise.c -o sunrise.exe

+0

[本節]的最後一段(https://en.wikipedia.org/wiki/Sunrise_equation#Hour_angle)? –

+0

這就是我的想法,但我已經嘗試過這些例子中的每個組合,例如。 ALT = -0.8333 + -0.5536
ALT = -0.8333 - -1.388
ALT = -0.8333 + -101.378
ALT = -0.8333 - (0.347 * SQR(米))
等 –

+0

其例子也是混亂,作爲顯示的算法似乎使用分割和平方根?但他們的例子只使用分區!? –

回答

0

假設一個沒有升高的周圍環境,即在一個山上,而不是在一個大的高原上,你可以首先計算由接觸切線的所有點形成的圓到達通過興趣點(基多)的地球表面,然後找到耳朵最美麗的日出和這個圈子上的最新日落。如果太陽照在這個圈子的任何部分,它也會在興趣點發光。

在一個高原上,我認爲你不需要做任何事情(如果基多在高原上,這意味着卡西歐是錯誤的),正確的做法是使用一個地球的計算更大的半徑或直徑,但在Paul的代碼中沒有這個變量。據推測,這個星球的大小的影響太小而無法相關,並且假定太陽射線到達地球是平行的(它們不是)。