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