基于VBA风螺旋的精确绘制

2016-11-14 02:05田茂鹏,向小军
中国科技信息 2016年21期
关键词:包络线夹角圆心

基于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语言可以精确的绘制出风螺旋。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)。可以采取变曲为直的方法来证明这一个夹角,如图二所示,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

猜你喜欢
包络线夹角圆心
基于ISO 14692 标准的玻璃钢管道应力分析
把脉向量中两类夹角背景下参数的取值范围问题
探究钟表上的夹角
求解异面直线夹角问题的两个路径
由椭圆张角为直角的弦所在直线形成的“包络”
抛体的包络线方程的推导
以圆周上一点为圆心作圆的图的性质及应用
如何求向量的夹角
参考答案
四种方法确定圆心和半径