基于VBA風螺旋的精確繪制
AutoCAD是目前世界上應用最為廣泛的圖形處理軟件,由于其靈活性,功能的全面性,受到了全世界應用者的廣泛好評。由于其適用性,以及AutoCAD工作團隊逐年對其修復和補充升級,其軟件功能越來越完備,也能緊跟技術的需要。但是由于其功能的多樣性,不可避免的犧牲了一些功能,其中AutoCAD的算法功能比較薄弱,在轉彎過程中就不能提供繪制風螺旋的功能。而飛行運行在轉彎過程中,不可避免的受到風的影響。在無風影響時,飛機的轉彎飛行軌跡應該是一個正圓,但是由于飛機在高空中飛行,受到風的影響,影響范圍以原軌跡上的點為圓心以風偏離量為半徑,飛機可能在這個區域的任意地方。所以在轉彎保護區需要附加風的影響,由于轉彎過程中風的影響會疊加,保護區會不斷的擴大,最終用包絡線將外邊界包絡才能得到最終保護區。
除RF和FRT航段外,飛機在其它航段中并沒有對風影響進行航跡的修復,在轉彎的過程中為了保護飛機,在凡是涉及到轉彎的過程中,都必須考慮到風對飛機轉彎的影響。在ICAO DOC8168 第二卷中規定了轉彎保護區的兩種畫法:風螺旋和邊界圓,其中邊界圓就是對風螺旋的一種簡易畫法,如何精確的繪制螺旋線,決定著飛行程序設計的準確性。以圖1為例,從a點進入,轉彎半徑為r,轉彎中心為c點,從a開始沿著轉彎方向旋轉θ角度,此時風對飛行影響的偏移量為:Eθ=(θ*W)/R
其中θ為轉過的角度,W是全向風速,R為轉彎率。
其中以b為圓心的圓為全向風的影響范圍,將n個全向風的圓包絡進去,其中最小滿足這一要求的包絡線即為風螺旋線。根據分析知道,該包絡線必須與各個圓相切。將轉彎角度細分得到的包絡線就是精確的風螺旋線。如圖2所示:
圖1 轉彎的細分示意圖
圖2 風螺旋的示意圖
圖3 風螺旋的參數界面
風螺旋雖然可以很好的繪制出保護區,但是人工繪制存在很大的難度,甚至是難以實現。采用VBA語言可以精確的繪制出風螺旋。VBA語言可以有效的減少工作量和誤差。
根據風螺旋的影響因素制作出了風螺旋的參數界面如圖3所示。
首先定義常數 :pi=3.141592653, g=9.80665
計算函數gm=gama/180*pi, rr=v*v/g/Tan(gm),R=v/rr/pi*180 在風螺旋計算應用時調用這些函數。
定義風螺旋的旋轉角度,一般定義為270°,也可以根據實際情況來進行定義劃分,在VBA的語言環境中并不能直接定義風螺旋的起止點,在VBA語言環境中通過定義點的斜率來進行定義方向:
startTan(0) = Cos(start_thita / 180 * pi + alpha)
startTan(1) = Sin(start_thita / 180 * pi + alpha)
startTan(2) = 0
endTan(0) = Cos((start_thita - thita_jiaodu_tt) / 180 * pi + alpha)
endTan(1) = Sin((start_thita - thita_jiaodu_tt) / 180 * pi + alpha)
endTan(2) = 0
這樣就定義了旋轉角度是從風螺旋的起始點到結束點。由于在實際應用中,轉彎的角度是任意的,因此插入風螺旋的角度必須與轉彎起始角度一致,因此在實際的過程中要輸入起始轉彎角度。
為了使風螺旋的起始點由人工尋找設定,則必須使風螺旋的起始點是任意點,為了實現這一功能需用到了Getpoint(”輸入插入點:”),這樣你可以在AUTOCAD任意的一點隨意插入起始點。
確定了起始點之后要確定轉彎的圓心,在VBA中找點使用到的函數是PolarPoint,通過PolarPoint函數經過起始點與圓心聯系起來, p1 = ThisDrawing.Utility.
PolarPoint(pt, pi, rr)
根據程序設計規范的規定知道,風螺旋是以轉彎中心為圓心,以轉彎半徑rr為半徑的圓的基礎上加上全向風偏量進行的繪制。由上述可知:
Eθ=θ*W/R。
p1 = ThisDrawing.Utility.PolarPoint(pt, (pi - thita), rr)
來找到第一個點。由此點就找到了第一個風影響的圓,然后以d為圓心以e為半徑畫圓circleObj = ThisDrawing. ModelSpace.AddCircle(d, e),然后找到包絡線的點p1 = ThisDrawing.Utility.PolarPoint(pt, (pi - thita), rr + e)其中需要注意的是,這樣找到的點是不正確的,因為通過此方法找到的點是d1點,通過連接所有d1的包絡線并不能把以d為圓心,以Eθ=θ*W/R為半徑的圓所有點包括進來,所以以點d1為基礎點進行包絡是不正確的,需要找到d2才是正確的點。
關于d2和d1的關系可以根據8168的規定,d1d和d2d之間的夾角為arcsin(w/v)??梢圆扇∽兦鸀橹钡姆椒▉碜C明這一個夾角,如圖二所示,bd是沒有風時候飛機走過的路徑為一條直線。圓圈代表了全向風的影響范圍,那么包絡線應該包絡到d2那一圓的切線點,而不是d1點,d1和d2之間的夾角a就是8168所對應的夾角。根據圖4所示,利用相似三角形原理,d1和d2之間的夾角與bd和bd2之間的夾角都是a。
bd表示飛機無風時候的飛過的距離bd=V*T,r為風的影響范圍r=WT,根據三角形定sin(a)=wt/vt=w/t,即:
a= arcsin(w/v)。
ThisDrawing.Utility.PolarPoint(pt, (pi - thita+arcsin(w/v)), rr+e)。由于VBA中并沒有自帶的反函數,需要自己建造一個函數
FuctionArcsin(x) as double
找到準確的包絡線的點后,利用VBA中的循環語言,For i = 1 To thita_n
thita = 1.5 * pi * i / thita_n
e = thita * w / R
根據情況將轉彎角度分為n分。另外利用擬合線
AddSpline命令將其連接起來就得到了風螺旋線。構造函數的過程可以再簡略點,注意知識產權的保護。
圖4 關于風螺旋夾角的示意圖
圖5 以1°為步長的風螺旋示意圖
圖6 風螺旋的放大后的細節圖
利用所做的方法可以知道,由上述找到的點連接成的擬合線完全將風的影響范圍包裹在里面。并且對于角度和風影響范圍進行了討論,嚴格的按照了飛行程序設計規范的規定制作,保證了風螺旋的正確性,并且由于在計算過程中,并沒有像其他的繪制方式一樣利用復雜的公式,這大大的簡化了繪制的難度和步驟,并且提高了計算的速度。
當n值越大的時候風螺旋的圓也就越密,則風螺旋就越準確。但是當劃分到一定的程度的時候,則運行越慢,系統容易報錯,也是不可取的。只要滿足相應的精度要求就可以。
根據以上的信息設計出的界面如圖5所示,根據實際的情況來輸入轉彎的速度、轉彎坡度、風速、以及根據要求輸入的的分段數n值,運行之后計算轉彎半徑,轉彎率。進行繪制就可以得到風螺旋。以1°為步長,即n為270。完全的滿足了精度的要求如圖五:
通過放大可以得知包絡線完全將風的影響包裹進去,說明制作的風螺旋符合規章的規定是正確的制作方法。如圖6所示。
文章根據飛行程序設計規范中的提出的風螺旋畫法,驗證推算了切線角度的問題,提出了風螺旋常見錯誤的避免方法,并且實驗了風螺旋任意點,任意點的插入。極大的方便了轉彎保護區的繪制。并且由于在編寫的過程中使用了角度旋轉的方法,而不是根據半徑和角度關系的推算進行的設計,極大的減少了運算的時間。并且避免了運算錯誤的計算,由于其簡便、快捷、準確、靈活的特性在實際的保護區的繪制過程中中得到了廣泛應用。為實現飛行程序保護區的自動繪制解決了關鍵技術。
10.3969/j.issn.1001- 8972.2016.21.036