汪昱列 周宇 徐佳笛



摘 要:太陽影子定位技術就是通過分析物體影子變化,確定物體所在經緯度的技術。本文根據幾何關系,結合窮舉算法和相似度算法對給定大致經緯度范圍內的物體進行精確經緯度定位的研究。我們首先通過太陽高度角與各個參數之間的關系,確立了影子長度與經緯度、日期、時間以及桿高之間的函數關系。接著,我們探討建立了日期已知的經緯度定位模型,優化了之前的影長變化模型,將其結合了遍歷算法。先通過影子頂點變化曲線特性分析縮小遍歷范圍,再遍歷了不同桿長所有可能的經緯度。利用歐式距離算法衡量影長與遍歷計算出的影長之間的相似度,歐氏距離最小的地點為最可能的直桿所處地點。最后,我們探討了日期未知下的經緯度定位模型。對之前的模型進行了進一步的優化:引入影子方位角變化量作為描述影子方位隨時間變化特性的參數,與影長結合共同描述影子變化特性。以影長相似度最高作為目標進行一次遍歷,接著以影子方位角變化量相似度最高作為目標,對一次遍歷結果進行二次遍歷,以求得與其相似度最高的地點的經緯度和對應的日期,并用歐式距離檢驗。
關鍵詞:經緯度、遍歷算法、歐氏距離
DOI:10.16640/j.cnki.37-1222/t.2016.09.218
1 影長變化模型的建立
我們設直桿影子長度為l,直桿長度為z。
太陽高度角是太陽射到地面的平行光線與地面的夾角,設其為h,范圍為(0°,90°)。
因為太陽光射到地面為平行光,又假設地面平整,固定直桿垂直于地面,則有影長與直桿長度z和不同時刻的太陽高度角h的三角關系。
其中,h是太陽高度角,為當地緯度,規定北緯度數為正,南緯度數為負,所以范圍為(-90°,90°),δ為太陽赤緯角,即太陽直射點所在的緯度,范圍為(-23°26,23°26),Ω為太陽時角。
由圖1可以看出,太陽赤緯角就是太陽直射點所在的緯度。太陽在地球上的直射點的緯度變化以年為周期,直射點在北緯23°26到南緯23°26的范圍內移動,太陽赤緯由日期確定,夏至時太陽照射在北回歸線,即北緯23°26,冬至時太陽照射在南回歸線,即南緯23°26。一天之中赤緯角的變化可忽略不計。因此固定日期的赤緯角δ可以當做常數。
赤緯角的計算公式可以查閱資料(資料名稱見參考文獻[2])得到,如下:
δ=0.006918-0.399912×cos(β)+0.0070257×sin(β)-0.006758×cos(2β)+0.000907×sin(2β)-0.002697×cos(3β)+0.00148×sin(3β) (1-3)
其中,β為日角,,n為日數,從1月1日開始起n=1,比如1月3日n=3。
因此只要已知日期(年月日),就可以算出具體的赤緯角值。
由圖2可看出,太陽時角Ω是指從地球上的觀測點天球子午圈沿天赤道量至太陽所在時圈的角距離。子午圈和天赤道量屬于地理學中赤道坐標系的概念,在本文中不過多展開。解釋一下太陽時角就是任一時刻太陽與直桿的連線在赤道面上的投影與觀測點正南方向的夾角。
設該地方的經度為α,西經為負值,東經為正值,α范圍為(-180°,180°)。設該地方的北京時間為t(當前時刻,單位為小時,例:12點36分即12.6小時),對于觀測點來說,不同時刻太陽相對于自己的方位也不一樣。這導致太陽時角的具體值也不同。所以太陽時角Ω與北京時間t和當地經度α有關。
查閱文獻[2]可知太陽時角Ω的計算公式:
其中S表示當地的真太陽時,即當地太陽位于正南向的瞬時,即當地的正午。
綜上公式1-1、1-2、1-3,如果已知某地經度α和北京時間t,就可以求出此時刻的太陽時角Ω;如果已知該地的日期,就可以求出該地的太陽赤位角δ,如果再知道該地緯度,就可以求出太陽高度角h,結合桿高z可以求出影長l。
通過公式1-1、1-2、1-3可得建立影長變化模型:
2 有日期下經緯度定位模型的建立
由于只要給出任意桿長就可以遍歷所有經緯度得到最有可能的地點,為了計算便捷,我們只給出桿長為2米和3米兩種情況下,最有可能的經緯度。
2.1 影長的計算
若已知條件中直接給出了影長則可以直接進行step2,若影長給出的是坐標(x,y),則可以算出影長,然后將經緯度范圍內的每個經緯點這個時刻的影長也算出來與之對比即可。
2.2 遍歷范圍的縮小
由于遍歷算法計算量巨大,所以我們考慮結合題目給出的北京時間數據和影子頂點變化曲線的特性來縮小遍歷的經緯度范圍。
(1)估算大致經度范圍。根據日夜狀態與一定的背景信息先行縮小經度范圍。
(2)估算大致緯度范圍。查閱地理學文獻[3]可以知道對于處在不同緯度的直桿,一天當中的影長軌跡可能有兩種情況。以北半球的夏季為例,北半球的夏季太陽直射點在北半球(赤道與北回歸線之間),那么位于直射點以南的地區(包括南半球),影子軌跡就如左圖;位于直射點以北的地區,一天的影子軌跡就如右圖。
2.3 將經緯度范圍代入遍歷程序
我們考慮先在較大經緯度范圍內進行粗遍歷,先找出最可能點所在的大致范圍,再縮小經緯度范圍,縮小步長,進行精確定位。
(1)縮小可能的經緯度范圍:由于初始遍歷的經緯范圍比較大,為防止程序計算量過大導致計算時間過長,我們可以先選取較大的經緯度變化步長,。
(2)精確確定經緯度:在得到粗略的經緯度之后可以縮小步長為0.01°,求出較為精確的地理坐標。
3 無日期下經緯度定位模型的建立
上一個模型已經分析,只有已知某地的日期、緯度、經度α、北京時間t和桿高z可以求出影長l,在無日期下,如果沿用之前的模型,則需要遍歷確定日期和桿長兩個量。
3.1 沿用之前模型計算不同日期下的經緯度坐標
我們在之前的遍歷模型外加上一層遍歷365天的循環,然后重新遍歷。
在進過試驗后可以看出來,沿用之前的模型仍能求出一年365天每天的最有可能的經緯度位置。但是無法確定附件給出的具體日期。因此我們加入地理學中太陽方位角的概念來確定日期。一天中物體影子的變化由影長變化和影子方位(和正南方向的夾角)變化共同確定,通過上述遍歷法求得的結果很多且相似度很高是由于只考慮了影長隨時間的變化的相似度,沒有考慮影子方位隨時間變化的相似度。上述模型中缺少描述影子方位變化參數。由此,我們引入極坐標系,來討論影子方位角的變化值,以此確定影子方位變化,對模型進行優化。
3.2 日期的確定
(1)極坐標系的建立。我們考慮將給出影長坐標的平面直角坐標系轉化為極坐標系。以直桿底端為原點,平面直角坐標系的x軸正方向為極軸正方向,取逆時針方向為角度的正方向,建立極坐標系:
與原平面直角坐標系轉化關系如下:
(3-2)
其中ρ=l(影長),θ為影子方向與極軸正方向所成的夾角。我們考慮利用上述極坐標系求出附件2中各個時刻的θ。
(2)太陽方位角A的引入。固定直桿底端為極坐標系的原點,變化極軸的方向,特別地,若以正南方向為極軸正方向,建立極坐標系。
此時,有θ=A,A為太陽方位角(直桿影子與正南方向的夾角),太陽方位角A與太陽高度角h間關系如下:
(3-2)
上式中,δ為太陽赤緯,Ω為太陽時角,計算方法之前已經給出。
所以,通過求解得到的每一天相似度最高地點的經緯度、桿高、日期和觀測時間,即可算出每一天相似度最高的地點,任意觀測時刻的太陽方位角。
但是,由于建立極坐標系時極軸方向的不同,通過計算得到太陽方位角A與利用附件原始平面直角坐標系轉化得到的極坐標系中的θ是不同的(當且僅當極軸方向為正南方向時θ=A)。
因此,我們考慮引入影子與極軸正方向夾角θ關于時間的變化量Δθ作為描述影子方位隨時間變化特性的參數,定義Δθ為影子方位角變化量。
我們定義Δθ為影長坐標給出的觀測后一時刻的θ與前一時刻θ的差值,由上述分析,太陽方位角A即為極軸方向為直桿正南方向時的θ,所以應當有Δθ=ΔA。
實際計算時,由于Δθ與ΔA不可能嚴格相等,我們考慮沿用歐式距離算法作為判定Δθ與ΔA相似度的算法,對求出來的一年365天每天的最有可能的經緯度進行二次窮舉,算出這365個經緯地點方位角的變化量ΔA與附件所給的影子與極軸正方向夾角Δθ的歐氏距離,篩選出最小的歐氏距離,得到經緯度。此時的經緯度即最有可能的經緯度地點,這個經緯度對應的日數即可推算出當天日期。第二次歐氏距離計算公式如下:
(3-2)
遍歷365個日期對應的經緯度,求取Δθ與ΔA相似度最高的地點作為最優解。
參考文獻:
[1]王國安,米鴻濤,鄧天宏,李亞男,李蘭霞.太陽高度角和日出日落時刻太陽方位角一年變化范圍的計算[J].氣象與環境科學,2007(S1):161-164.
[2]賀曉雷,于賀軍,李建英,丁蕾.太陽方位角的公式求解及其應用[J].太陽能學報,2008(01):69-73.
[3]武琳.基于太陽陰影軌跡的經緯度估計技術研究[D].天津大學,2010.