中国科技论文在线http://www.paper.edu.cn基于VisualFortran和AutoCAD的Bezier曲线的自动绘制及应用杨帆扬州大学水利科学与工程学院江苏扬州(225009)Email:sqyzyangfan@126.com摘要:Bezier曲线是计算机图形学中最基本、最重要的内容之一,在计算机辅助几何设计领域得到广泛地应用。本文以Fortran90语言和AutoCAD图形软件为平台,开发了Bezier曲线绘制子程序,该程序能够保存、处理数据文件,形成直观地曲线供用户输出,实现了计算机自动绘图的目的,并基于该程序编制了部分应用主程序来实现自动绘图子程序的价值。关键词:Bezier曲线自动绘制应用中图分类号:TP312;TP391.721.Bezier曲线及其原理上世纪60年代,法国雷诺汽车公司的工程师贝济尔提出了用控制多边形定义曲线的方法,即Bezier曲线,因该曲线采用了一组独特的多项式基函数,使得它具有许多优良的特性,在诸多形式的参数多项式曲线中独树一帜,一经问世,就受到工业界和计算机辅助几何设计研究者的广泛重视[1]。Bezier曲线算法是一种直观、易于调整、高效率的曲线拟合方法,这种方法能使使用者在工程设计中比较直观地意识到所给条件与设计出的曲线之间的关系,能方便地控制输入控制点以改变曲线的形状。Bezier曲线的形状由点的位置确定,而且曲线可能并不通过除两端点外的所有给定点,点数量不够或点位置难以处理的情况下,用三次样条曲线方法也许不能生产光滑曲线。Bezier曲线有不同的数学定义形式,如德卡斯特里奥递归(deCasteljau)算法,波恩斯坦基(Bernstein)原理等。本文中Bezier曲线的自动绘制方法采用Bernstein原理。Bezier曲线的数学基础(影响曲线形状的加权系数)来自下式给出的Bernstein原理:éùn-énùn!Jt,()=t(1-t)êúniêúini其中:=iniêúiêúi!(-)!....式中:n是多项式的次数,i是有序集中(0与n之间)的某个顶点。ini,()t1)i曲线点定义为:Pt()=.(n)PJt(0££其中:i=1~n,S包含各个点的向i=0量分量。-为构造Bezier曲线,需要计算Jtni,()=!(n-!)!ti(1-t)niini其中:nm1=-,m为给定的顶点个数,n为多项式的次数。2.软件的接口及编程1中国科技论文在线http://www.paper.edu.cn中国科技论文在线http://www.paper.edu.cn,AutoCAD具有强大的图形绘制和编辑功能,两种软件均是许多行业的工程技术人员所必备的工具,若集成两种软件的优势,将两者有机地结合起来却并非易事。目前,Fortran语言与AutoCAD软件间数据通信方式主要有下面两种[2]:⑴将Fortran的计算结果输出为DXF格式,利用AutoCAD将其打开即可看到计算的结果图像。DXF(AutodeskDrawingExchangeFormat)是AutoCAD中的矢量文件格式,它以ASCⅡ码方式存储文件,在表现图形的大小方面十分精确。⑵通过VB实现Fortran与AutoCAD之间的数据通信,VB是通过AutoCADActiveXAutomation接口来建立于AutoCAD对象之间的联系。本文采用第一种方法,对AutoCAD软件常用的基本绘图命令利用Fortran语言编写相应的接口子程序,即建立Fortran与AutoCAD间的接口软件。通过Fortran语言编程直接读取离散控制点数据,通过对离散控制点进行曲线拟合,最后生成AutoCAD支持的DXF文件,最终利用编程生成的模型在AutoCAD环境下显示,使其具有工程技术人员熟悉的友好的用户界面,并且具有人机交互的功能。下面仅给出了部分程序的清单。绘制多段线的程序:SUBROUTINEPLINE(X,Y,K,LY)WRITE(3,200)NANA=0CHARACTER*(*)LYWRITE(3,600)LYWRITE(3,200)NADIMENSION(X(K),Y(K))DOI=1,KWRITE(3,600)‘SEQEND’NA=0NA=0NA=8WRITE(3,200)NAWRITE(3,200)NAWRITE(3,200)NAWRITE(3,600)’POLYLINE’WRITE(3,600)’VERTEX’WRITE(3,600)LYNA=8NA=8FORMAT(I3)WRITE(3,200)NAWRITE(3,200)NAFORMAT(F12.6)WRITE(3,600)LYWRITE(3,600)LYFORMAT(A)NA=66NA=10RETURNWRITE(3,600)LYWRITE(3,200)NAENDWRITE(3,600)LYWRITE(3,210)Y(I)NA=70CONTINUE计算影响曲线形状的加权系数的程序:allocate(j(k+1,n))callfactorial(w,b)enddom=n-1c=m-wenddot=1.0/kcallfactorial(c,d)callfactorial(m,a)callpower(i,w,e)doi=0,1,tf=1.0-iq=q+1callpower(f,c,g)dow=0,mj(q,w+1)=a/(b*d)*e*g233.实例应用本...