golang计算任意两点间的方位角
計算任意兩點間的方位角
方位角是從某點的指北經(jīng)線起,依順時針方向到目標方向線之間的水平夾角(如圖所示θ,可以將其看成是指南針所指示的角度),也即是OPN平面與OPQ平面的所構(gòu)成的二面角大小。
以北極點N為頂點,N-PQO構(gòu)成了一個三面角。
二面角N-PQ-O的大小為θ,其平面角為π/2 - φ2;
二面角p-ON-Q的大小為λ2?λ1,其平面角為δ;
由三面角正弦定理可得:
由三面角余弦定理可得:
由此可得:
結(jié)合上述在求解兩點間的距離時得到的結(jié)果:
可得到:
進而得到方位角:
二面角
從一條直線出發(fā)的兩個半平面所組成的圖形,叫做二面角。 這條直線叫做二面角的棱,每個半平面叫做二面角的面。以二面角的公共直線上任意一點為端點,在兩個面內(nèi)分別作垂直于公共直線的兩條射線,這兩條射線所成的角叫做二面角的平面角。二面角的大小, 可以用它的平面角來度量。
三面角
從一點出發(fā)并且不在同一平面內(nèi)的三條射線,其中每相鄰兩射線可以決定一個平面,這樣的三個平面所圍成的立體圖形叫做三面角。其中,這三條射線叫做三面角的棱,這些射線的公共端點叫做三面角的頂點,相鄰兩棱所夾的平面部分叫做三面角的面,在每個面內(nèi)兩條棱所形成的角叫做三面角的面角,過每一條棱的兩個面所形成的二面角叫做三面角的二面角。一個三面角可以用它的頂點的字母來表示,例如“三面角S”;或在頂點的字母之后加一短劃,并順次寫上每一條棱上的一個字母,例如“三面角S-ABC”。
工程實現(xiàn)
下面是計算地球上任意兩點間的方位角的工程實現(xiàn),使用golang語言:
func Radians(x float64) float64 {return x/math.Pi }//地球上任意兩點間的方位角 func Complex(lon1,lat1,lon2,lat2 float64) float64{var numerator = math.Sin(Radians(lon2-lon1)) * math.Cos(Radians(lat2))var denominator = math.Cos(Radians(lat1)) * math.Sin(Radians(lat2))- math.Sin(Radians(lat1)) * math.Cos(Radians(lat2)) * math.Cos(Radians(lon2 - lon1))var x = math.Atan2(math.Abs(numerator), math.Abs(denominator))var result = x// 右象限if lon2 > lon1 {// 第一象限if lat2 > lat1{result = x} else if lat2 < lat1{ // 第四象限r(nóng)esult = math.Pi - x}else{result = math.Pi / 2 // 在正x軸上}}else if lon2 < lon1{if lat2 > lat1{// 第二象限r(nóng)esult = 2 * math.Pi - x}else if lat2 < lat1{ // 第三象限r(nóng)esult = math.Pi + x}else{result = math.Pi * 3 / 2 // 在負x軸上}}else // 同一經(jīng)度{if lat2 > lat1{ // 在正y軸上result = 0}else if lat2 < lat1{result = math.Pi // 在負y軸中}else{fmt.Println("不應(yīng)該在同一個地方!")}}return result * 180 / math.Pi }以上計算公式適用于地球上任意兩點,請注意經(jīng)緯度分正負值。對于經(jīng)度來說,東經(jīng)為正,西經(jīng)為負;對于緯度來說,北緯為為正,南緯為負。
總結(jié)
以上是生活随笔為你收集整理的golang计算任意两点间的方位角的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 任意两平面求夹角|Python练习系列[
- 下一篇: java自动化测试之开发工具eclips