您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 硕士学位论文开题报告汇总
张云贵北京理工大学硕士学位论文开题报告1面向移动设备的矢量绘图平台设计与实现1学位论文(设计)选题的目的和意义虽然二维交互式矢量绘图技术在PC机上早已成熟,但在手持移动设备上还处于发展阶段。传统的移动设备(嵌入式设备)一般不具备浮点处理单元和图形处理器,图形显示性能和分辨率较低[1],仅能单点触摸且触摸灵敏度较低,不适合较复杂的交互式绘图应用。2007年iPhone发布后,在新一代移动设备上的应用研究逐步开展起来。iPad发布后,惠普、联想、三星等众多厂商在随后的一年内也推出了各种平板电脑(Android平台居多)[2],其高分辨率、便携性和性价比使其适合于较复杂的交互式矢量图形应用,引起学术界和工业界的高度重视。到201?年底国外已有大量的二维交互式矢量绘图软件发布在iPad和iPhone上,而国内仅有浩辰公司推出的GstarCADMS[3]等极少数同类软件,其余的主要是基于图像描绘或简单图形显示的软件。目前国内外还缺乏通用性的交互式矢量绘图框架,移动设备的硬件架构和开发环境与PC机相差很大,迫切需要有相应的开发框架(二次开发平台)来降低应用开发难度、避免研发周期长和重复开发问题,进而快速应用于互动课堂教学、阅读批注、手绘草图、图文笔记、辅助设计等图形应用领域。根据上述现状的分析,研究适用于手持移动设备(iOS和Android平台)的交互式二维矢量绘图平台,具有较大的发展空间和应用价值。因为不同应用领域的需求差异大、多数开发人员能够胜任软件界面定制和业务功能扩展的开发,所以将研究范围限定在二次开发平台及底层实现上,以跨平台开源框架的形式扩大适用范围,将该平台应用于互动课堂教学、阅读批注和图文笔记等多种图形应用软件中。1.1研究背景、研究现状、发展趋势分析目前主流的手持移动设备有智能手机和平板电脑两大类。平板电脑更适合交互式绘图,其设备采用了高分辨率的多点触摸电容屏,处理器大部分采用ARM架构,相对于x86架构更低耗高效[4],主流配置是1GHz以上的双核CPU,具有较强的GPU和浮点处理能力[5],但内存量受限,例如iPad1和iPhone4为256MB,Android上每个程序则最多使用16MB内存[6]。需要设计低内存条件下的图形计算和内存管理方式。在移动设备上二维图形引擎主要有三类:(1)基于跨平台渲染流水线的OpenGL张云贵北京理工大学硕士学位论文开题报告2ES和OpenVG。OpenGLES适合三维实时浏览应用,国内研究较多[7],跨平台性和硬件加速能力是其主要优点,主流移动GPU都支持这两种图形加速标准,但用来进行二维绘图开发会加大系统复杂性、增加开发成本[8]。OpenVG适合于SVG和Flash等二维图形的高质量渲染场合,国内针对其渲染流水线和硬件加速进行了较多研究[1,9-11],目前实际应用还不多。(2)基于画布模型的图形库。相对于渲染流水线方式其开发难度较低,这些图形库很多,iOS和Android的典型图形库分别是Quartz2D和Skia,在Windows上有GDI+、Direct2D[12]。201?年杨硕飞就是使用Quartz2D设计了动态几何画板软件[13]。(3)基于HTML5Canvas和移动SVG的实现方式。由于开销大等原因,目前在移动互联网中应用还较少。不同的图形库所支持的矢量图形API(绘图原语)不完全相同,通常是将曲线转换为三次Bezier曲线来解决该问题。基于三次Bezier曲线可对圆、圆弧、椭圆弧、B样条曲线等多种曲线图形的图形模型转换、包络框、点中测试、图形相交、分割和拼接、外扩、裁剪等计算技术进行统一处理[14],这些技术已经很成熟。触摸屏相对于鼠标交互方式存在精度低、有轻微颤抖的问题,导致手绘曲线存在数据点较多和抖动等噪声问题[15,16],通常首先采用预处理去除噪声,然后使用光滑的样条曲线来插值或逼近型值点。预处理去除噪声的方法有:(1)中点采样法[17],减少重合冗余点和局部干扰点;(2)距离重采样法[18],对点较稀疏和密集的区域增减点,但容易变形或丢失角点;(3)折线逼近法[16]得到最佳逼近折线并使用B样条连接;(4)通过相邻两折线的夹角过滤中间冗余点,通过点密度过滤始末点区域的冗余点[19],但可能会引起变形;(5)根据数据点到相邻两点线段的距离判断中间冗余点[15]。上述去除噪声的方法各有特点,目前在学术界还没有形成统一的观点,可以根据实际需求选择,这将是本课题要面对的技术难题。手绘草图应用可采用逼近拟合的方法得到较光滑的曲线,可采用分段拟合的方法避免角点被圆滑的问题[20,21]。逼近拟合通常采用能量法[22]或最小二乘拟合法[19,20,23,24],也可结合这两种方法[25]。手写应用需要尽可能与原始笔迹一致,可采用插值方法计算样条曲线,如反求三次B样条曲线[26]、二次B样条曲线[27,28]、三次参数样条曲线(累加弦长法插值)[29],但当触点分布不均匀时容易出现变形和打圈现象,而采用分段拼接的方法可解决部分问题。在确定数据点参数的方法中,最简单的均匀参数化法在相邻段弦长相差较大的情况下容易出现尖点和打圈现象[30],累加弦长参数化法解决了这一张云贵北京理工大学硕士学位论文开题报告3问题,累加弦长参数化在手绘应用较多。基于能量模型的参数化方法计算局部曲线的节点参数[30],其样条插值曲线比较光顺。在拟合常用的曲线中三次参数样条曲线计算简单,B样条曲线的存储空间最小(不需要节点切向矢量)[21],而在手绘图形中通常采用三次非均匀B样条曲线[18]。手绘开始和结束这两段较密集,可使用Bezier曲线平滑,而中间段点较稀疏,可使用B样条曲线方法[21],最后将Bezier曲线与B样条曲线光滑拼接[31]。多点触摸屏能够同时接受来自屏幕的多个位置的触点信号并综合识别为一个触摸手势。LukeWroblewski总结了十种经典的核心手势[32],单指手势有单击(Tap)、双击(DoubleTap)、拖动(Drag)、滑动(Flick)、长按(Press),双指手势有缩放(Pinch/Spread)、旋转(Rotate)、按住并单击(PressandTap)、按住并拖动(PressandDrag)。最后两种手势在主流操作系统中没有内置支持,单指手势都支持,Android上需要自行识别旋转和缩放手势。研究表明食指、中指或五个手指是在交互中使用最多的[33],因为较多Android机型最多同时识别三指[34],所以在绘图平台中尽可能只使用单指和双指手势。将触摸事件识别为手势的方式主要有三种:(1)采用操作系统内置的手势识别器,能够识别最常用的基本手势类型,开发工作量较小,而且能在各平台上保证交互一致性。在iOS上可以使用UIGestureRecognizer的派生类[35],有6种内置的手势识别器,在Android上可以使用GestureDetector类[36],旋转和放缩手势需要自行识别。(2)直接对原始触摸事件信息(轨迹、速度)进行识别,实现个性化的手势识别器。例如在iOS上可直接响应触点的开始、移动、结束和取消状态的事件[37]。(3)基于独立的手势识别框架开发,手持移动设备一般基于多触点定位技术识别手势[38]。手势识别的一个常见问题是手势二义性(手指动作可理解为多种相似的手势类型),一般通过延迟发送技术解决[39],等待其余相近手势都识别失败后才将手势命令发给应用程序。试验发现延迟技术可能导致响应迟钝,对于实时反馈要求较高的随手书写应用需要有合理的延迟阀值。基于触点的触摸状态、位移和时间的方法可解决几种手势的冲突[38]:(1)滑动和拖动通过滑行的距离判断;(2)单击、长按和双击通过两次点击的时间间隔和按下持续时间长度判断。iOS平台对此除了采用延迟开始和延时结束的方法外,还允许应用程序使用这几种方法:设置手势静态依赖关系、动态判断新触点能否加入到某个手势、允许多个手势同时识别再综合判断。张云贵北京理工大学硕士学位论文开题报告4移动平台的开发环境有Java等托管代码和C/C++等本机代码这两种方式,C++适合大多数移动平台,常见的移动平台除了iOS外都支持Java或C#托管代码方式[40]。在iOS上可以使用ObjectiveC和C/C++混合编程,C++代码必须实现为静态库或编写到程序模块中,不能有动态链接库。Android上的Java虚拟机是Dalvik,与通常的JavaME不同,应用程序主要使用Java及AndroidSDK开发,用C/C++及AndroidNDK(NativeDevelopmentKit,包含面向ARM设备的交叉编译工具和有限的API)开发动态链接库,该动态链接库以JNI接口形式供Android上的Java模块使用[40]。使用AndroidNDK开发原生C++动态链接库的方式主要有两种:(1)先编写JNI接口的Java文件,使用javah工具从该文件生成原生C头文件(包含了JNI对应的C导出函数),然后使用C/C++实现该这些JNI导出函数,最后使用NDK编译为动态链接库[41]。(2)由于手工实现JNI导出函数较复杂,可以使用SWIG工具[42]从C++头文件生成JNI的Java文件和相应JNI导出函数的C++封装实现文件,然后将原有的C++实现文件与SWIG生成的实现文件一起使用NDK编译为动态链接库[43],SWIG简化了JNI的开发。SWIG的经典版本2.0.4不适合Android的Dalvik虚拟机[43],SWIG官方在2012年4月修复了该问题,可使用最新版来开发原生C++动态链接库。在针对Android设计绘图接口时应尽可能使用简单数据类型,少用包装对象,以避免JNI接口的性能损失[44]。由于Dalvik最多支持512个JNI本地引用对象,容易出现内存溢出的问题,在JNI内部实现上要注意释放引用对象[45]。iOS上的图形库有2D/3D图形库OpenGLES、二维图形库Quartz2D、多媒体库QuickTime及动画框架CoreAnimation,Quartz2D适合于二维矢量绘图开发。Quartz2D是CoreGraphics框架的一部分,界面框架UIKit在界面显示时使用的就是Quartz2D,矢量绘图平台在iOS涉及较多的就是UIKit和CoreGraphics框架,苹果官方文档和研究资料[46]提供了这些框架的详细说明。使用Quartz2D开发绘图平台时需要注意下列几点:(1)触摸点和界面位置基于UIKit的坐标系,其Y轴向下,而Quartz2D的坐标系在视图左下角,Y轴向上,UIKit的坐标单位为点而不是像素,要避免取整误差。UIKit通过设置Quartz2D的CTM(当前变换矩阵,二维仿射变换矩阵)的方式将坐标映射到Quartz2D坐标系中[47]。(2)UIKit不具备多线程安全性,界面显示和改动只能在主线程进行[48]。张云贵北京理工大学硕士学位论文开题报告5(3)视图自定义绘制参考官方给出的五个性能提升的建议(DrawingTips)[47]。Android上的图形库有OpenGLES和底层的C++Skia跨平台图形库,AndroidCanvas框架是对Skia的Java封装,官方资料[49]提供了详细使用说明。1.2前人在本选题研究领域中的工作成果简述国内较多学者对OpenGLES[7]和OpenVG[1,9-11]的渲染流水线和硬件加速进行了较多研究,主要采用了精简耗时的图元效果、采用单精度和定点数减少开销、路径的各种显示优化、反走样渲染加速等技术。其中沈江在Android手机上实现了OpenVG渲染,其方法是将OpenVG渲染后的图像通过EGL(Android平台中基于OpenGLES实现的底层模块)复制到屏幕上[11]。基于渲染流水线的图形系统具有很高的绘图性能,但技术难度较大,开发成本高。Quartz2D与交互式矢量绘图技术结合的资料较少,201?年杨硕飞使用Quartz2D设计了动态几何画板软件[13],是目前国内在这方面少有的研究实践之一,不足之处是上层图形绘
本文标题:硕士学位论文开题报告汇总
链接地址:https://www.777doc.com/doc-3565760 .html