• 算数表达式程序的算法分析与设计 > 计算机与现代化2OO4年第12期JIsuANJI YU XIANDAIHUA 总第l12期 ...
  • 计算机与现代化2OO4年第12期JIsuANJI YU XIANDAIHUA 总第l12期 ...

    免费下载 下载该文档 文档格式:TXT   更新时间:2011-12-31   下载次数:0   点击次数:2
    计算机与现代化2OO4年第12期JIsuANJI YU XIANDAIHUA 总第l12期文章编号:loo6-2475(2oo4)12.0021.02 通用图形设计系统中交互式绘制B~zier曲线的实现田原,章义来,彭永康(景德镇陶瓷学院信息工程学院,江西景德镇333001) 摘要:讨论了Windows环境下实现交互式绘制B~zier曲线的方法,所绘曲线具有夹点捕捉功能,可交互式编辑和修改。关键词:Windows;交互式绘制;B~zier曲线;所见即所得。中图分类号."rP302.4 文献标识码:A Implementation ofDrawLng B~zier Curves Interactively in General Graph Design System TIAN Yuan,ZHANG Yi-lai,PENG Yong-kang (College of Information Engineering,Jingdez~n C,e3"a~c Institute,Jingdezhen 333001,China) Abstr'/l~:This paper vesthemethodfordrawingBb~ier curvesintemcfivelyinWindows.The curves carI snap cNlnod4~and can be editee and modified intemcfively.Key words:Windows:draw interactively;B~zier curves;WYSWYG 0 引言曲线的表现是计算机图形学的重要内容,它是描述物体的外型,建立所画对象的数学模型的有力工具。在汽车、飞机、轮船、陶瓷等的计算机辅助设计中,复杂曲线的设计是一个主要问题,所谓复杂曲线,是指形状比较复杂、不能用二次方程描述的曲线。汽车车身、飞机机翼和陶瓷制品的外型等的曲线均属于这一类,一般称为自由曲线。常用的自由曲线有Her.mite曲线、三次样条曲线、B~ier曲线和B样条曲线等。这些自由曲线都是采用分段或分片参数多项式的形式,有许多特别适合计算机图形需要的特点:诸如曲线的形状不依赖于坐标系的选取,有直观和简便的人机交互手段,容易离散生成以及造型灵活、易于拼接等优点,所以成为计算机图形学中主要的造型手段。三次参数样条曲线在工程中应用非常广泛,它可以通过给定的型值点。然而,当用户认为所产生的三次样条曲线不能满足性能或美观的要求而需要修改时,三次参数样条曲线则不能直观表示出应该如何修改以及如何控制曲线的形状;如改变了一个或多个型值点,就可能出现并非所希望的曲线形状。所以三次样条曲线作为外型设计的工具,缺少灵活性和直观性。而B~zier曲线能使设计者比较直观地意识到所给条件与所产生的曲线之间的关系,是构造自由曲线的最重要和最基本的方法之一,它可以满足几何造型对曲线的要求。1 有关B/~zier曲线的数学概念I.B~zier曲线的数学表达式。在空间给定n+1个点Po,Pl,P2,?,Pn,则称下列曲线为11次B~zier曲线。Q( ):∑PiC~(I—/n) (1) =0 图1 B~zier曲线Q(i) 一般称折线PoPl?Pn为Q(i)的控制多边形;称Po,P “,Pn各点为Q(i)的控制顶点。要改变Q(i) 的形状,只要改变Pn,P ..,Pn的位置。如图I所示。所以把控制多边形作为曲线输入和人机交互的收稿日期:2004-04-03 作者简介:田原(1972-),女,内蒙古呼和浩特人,景德镇陶瓷学院信息工程学院讲师,高级程序员,南昌大学硕士研究生,研究方向:陶瓷产品CIMS;章义来(1965.),男,安徽贵池人,教授,华南理工大学博士研究生.研究方向:陶瓷产品CIMS;彭永康(19"/0-),男,云南永胜人.讲师.高级程序员,南昌大学硕士研究生,研究方向:陶瓷产品CAMS。维普资讯http://www.cqvip.com 22 计算机与现代化2004年第12期手段,既直观又简便,用户不需了解Bbzier曲线的数学定义,就可画出满足要求的B~zier曲线。2.B~zier曲线的拼接。一段B~zier曲线常常不足以表示复杂曲线,为构造这种曲线,通常需要将一段段的Bbzier曲线首尾拼接起来。当两段曲线首尾相连时,不同的问题在连接点处对连续性有不同的要求,常用到的有如图2所示的几种。【a)G 垤绥(b)CC’垤绥(c)C 连绥图2 曲线拼接的连续性两段曲线在连接点处首尾相连,它们在连接点处达到02连续,称为零阶几何连续(如图2(a))。两段曲线在连接点处达到GC连续,且切向相同,它们在连接点处达到GC连续,称为一阶几何连续(如图2(b))。两段曲线在连接点处除了达到GC连续外,它们的主法线方向一致且曲率相等,它们在连接点处达到02连续,称为二阶几何连续(如图2(c))。3.B~zier曲线的离散生成。有时需要将一段B~zier曲线分成两段,分成的曲线仍然是自由曲线,它们可以表示成Bbzier曲线的形式。怎样从原控制多边形求得分成的两段曲线的控制多边形呢?可以采用割角的方法,如图3所示。Pl P2' P2 图3 P~zier曲线的割角过程连接控制多边形POP1P2P3各边的中点,则割去角P1和P2;同理,继续割角,所产生的多边形依然是该曲线的控制多边形(证明略),直至可以将该曲线分成若干段为止,在图3中,曲线被分成了两段P0"P3”和P3 P6 。2 交互式绘制B~zier曲线的实现1.设计目标。在图形设计系统中,当用户选择了B~ier曲线绘制工具时,便可以在屏幕上进行绘制了,Windows API 提供的现有函数要求必须给出控制点的确切位置,所以系统必须为用户解决的问题是:当用户随意按下鼠标时,能够产生连续的&zier曲线,用户不需额外考虑;当用户需要修改曲线的形状时,只需拖动控制顶点即可,而型值点不变。每一次按下鼠标左键并松开时,都会产生一个型值点。当第一次按下鼠标左键并松开后,产生Q(O) 点,然后随着鼠标的移动(不按键),产生一根橡皮筋线,橡皮筋线的起点为画图过程中已确定的最后一个型值点,终点则为鼠标当前移动处。第二次按下鼠标左键并松开时,产生Q(1)点及连接Q(o)和Q(1)的一条直线,此时移动鼠标,则产生一条不确定的Bbzier 曲线(如图4所示),它的形状随着鼠标的移动而发生变化。Q(I) 0(0 ,Q(2) 图4 两次按下鼠标左键后的图形再次按下鼠标左键时,则产生一条B~zier曲线。随着用户不断地按下鼠标左键,这条Bbzier曲线便不断地延伸。当用户按下鼠标右键时,则本次操作结束,一条美观而又通过所有型值点的Bbzier曲线则完成了。当用选择工具将曲线选中时,则所有控制点重现,用户只需拖动控制点,便可实现对曲线的修改。2.数学模型的建立。由前所述,知n次Bbzier曲线具有n+1个控制点,其中P0、Pn分别与Q(O)和Q(n)相重合。当n=2 时,即两次按下鼠标左键后,由式1,得:rQ(O)=P0 {Q(1)=Po (1—1/2) +Pl C;(1—1/2) (1/2)+P2 谚(1/2) l Q(2)=P2 由于Q(O)、Q(1)、Q(2)为鼠标按下时产生的点的坐标,即为已知,故可求得:PI=2·Q(1)一Q(O)/2一Q(2)/2 为了保证随后所画的曲线能与已画曲线在连接点处连续,利用割角原理,求割角后的控制点,用H (1)、H(2)表示,H(1)=1/3·Q(O)+2/3·Pl H(2):2/3·Pl+1/3’Q(2) 如图5所示。故可以认为,曲线Q(0)Q(1)Q(2)由控制点Q (0)、H(1)、H(2)、Q(2)产生,曲线Q(1)Q(E)Q(3)由控制点Q(1)H(2)H(3)Q(3)产生,依次类推,以后所依次画出的曲线都满足这个规律。为简化H(3)的求法,可以认为H(3)在H(2)Q(2)的延长线上,且I H (2)Q(2)I=I H(a)Q(2)I,则可求得H(3),公式如下:(下转第6l页) 维普资讯http://www.cqvip.com 20O4年第12期杨汉祥等:高性能嵌入式网络数据库管理系统的研究61 8 性能评估本套系统考虑了很多优化(例如在RTLinux下使用mmap()文件),在实际环境中获得了非常好的效果,以下均在RTLinux下用time命令测得。数据量(1000000,一百万条),PII 400 MHz,64MB RAM ;动作:进库并为6个字段分别生成索引文件。表1 实测性能统计\字\2 3 4 5 6 7 8 A l0.905s I1.054s l0.她l0.9828 10.912s l0.968s I1.046s B 50.269s 23.2598 23.264s 22.682s 22.664s 22.8Ols .800s C l9.86o8 l9.8958 l9.7528 19.833S l9.9O7s l9.825s 19.815S D 26.883s 25.882s 25.845s 25.696s 25.727s 25.599s 25.613s E 31.981s 30.816s 30.8l28 30.437s 30.548s 30.6Ils 3o.599s F 36.O02s 34.666s 34.547s 34.389s 34.427s 34.316s 34.273s 结果分析:上面的建库和建索引过程比流行的通用数据库管理系统如Ms SQL Server和Oracle快了3O倍左右(当然SQL Server和Oracle还要处理事务支持等),查询等操作结果也是立即可得。由于6个字段中包括好几个数字字段(如D,E),它们的长度都非常短,所以在提高阶数的时候性能提高并不明显(这同时也是本程序采用KEY长度为3 的原因);在采用“前缀法”给出信息项的KEY时,KEY的数目不多也是性能提高不明显的表现,因此可以通过修改信息项和KEY的映射方式来进一步提高程序的表现。在阶数从2变到3时,由于随机生成的姓名产生的KEY的数目非常多,因此有了将近一倍速度的提高,再提升阶数的时候,效果已经不明显了。根据上面的表格和一些查询、修改和删除的测试,表明了本程序的设计思想非常成功,程序在建立索引和查询、快速删除的访问下有着优秀的表现力。但程序在删除和修改的效率上还可以更进一步提高:将字段分开文件存储或固定字段位置(无需遍历搜寻特定字段),独立索引,再利用预分配的思想,可以使得删除和修改的效率进一步提高。9 结束语在上面的通用嵌入式网络信息数据库管理系统的实例中,改进优化了B树算法,解决了嵌入式高性能网络数据库管理系统的若干关键技术问题,在性能评估中得到了相当好的效果,并在江西省教育厅2002—2003科技项目中得到应用,成功作为多媒体监控系统多点复合器( )的后台嵌入式数据库系统。笔者愿以此抛砖引玉,激起大家对建筑高性能嵌入式网络数据库管理系统的探讨。参考文献:[1] W Richard Stevens.Advanced Prov'an~ng in the Unix EnviromneentEMJAddison-Wesley,1992.[2] W Richard Stevens.Unix Network Pr叼瑚瑚ing(Volurae I) 【MJ.Prentice Hal。1992.[3] 陈坚,陈伟,等.Visual c“网络编程[M].北京:人民邮电出版社,2OOO.[4] 严蔚敏.数据结构(C语言版)[M].北京:清华大学出版社。1999.(上接第22页) Q P H(3)Q(3) 图5 求控制点H(3) n(3)=2·Q(2)一n(2) 3.所调用的API函数为:Declare Function PolyBe.zierTo Lib sdi32"(ByVal hDC As Long,lppt As POINFAPI,ByVal cCount As【DIlg)As【DIlg 其中lppt为控制点数组名,cCount为控制点的个数。(具体代码略) 参考文献:[1] 刘静华,王永生.新编计算机绘图[M].北京:北京航空航天大学出版社,1997.[2] [美]Mattbew Tells,Andl'ew Cooke.Windows 95 API开发人员指南[M].吴冰,姚彦忠,等译.北京:机械工业出版社,1997.维普资讯http://www.cqvip.com 
  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 TXT格式下载
  • 您可能感兴趣的
  • 算数表达式求值  算数表达式  算数运算程序设计  表达式求值算法  正则表达式匹配算法  算数平方根教学设计  说话算数的教学设计  表达式求值程序  算术表达式求值的程序