




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Smart Geometry详细设计说明书IT Project ManagementSCUTCopyright1 概述1.1 系统简述 由于目前的主流电子课件系统,无法满足教师在课堂教学互动中需要与用户界面自然、高效、连续性交互的要求。我们准备用我们的实际行动来试图改变这一现状,本项目拟实现一个能在ipad上运行的智能几何教育平台,其功能包括草图识别,手势识别,动态几何约束等。由于时间有限,动态几何约束求解与动态几何可视化这部分的功能暂不准备实现。非功能性的需求有系统出错处理及易操作性。1.2 软件设计目标本项目系统概要设计说明书是基于Smart Geometry智能几何教育平台需求分析书进行
2、编写的。该项目将以笔代替鼠标键盘,能够连续添加笔迹批注,勾画并识别几何草图,用笔手势操纵界面元素。本概要设计同时也是为详细设计及后续开发,提供指导作用。预期的读者:详细设计人员开发人员测试人员用户1.3 参考资料ipad开发应用实战,iphone4与ipad开发基础教程,Objectivec基础教程,ipad开发基础教程,ipad应用开发实例。2 术语表 本文档所涉及到的属于包含如下: 1、Stroke:笔迹,用户一次落笔提笔2、Pen_Info:预处理3、Graph:图形类4、Guint:图元类5、Graph_Edit:图形编辑类6、Constraint:图形与图形之间的约束,一个图形拥有多
3、个约束,由约束的类型来标识。7、特征点:用于划分图元的点,比如三角形的顶点。8、点集:一系列点的集合9、图元:组成图形的最小单位,比如三角形的边。10、双线程:当开始录制视频时,创建新的线程进行录制操作。11、切割:通过特征点来划分点集属于的图元类型。12、拟合:将被划分好的图元计算出最能代表该点集的方程表达式。3 用例上图表明使用本系统的用户需要打开软件系统,就能使用系统,用户输入图形进行草图识别,并可以对识别出来的图形进行清空、保存等功能。用例描述序号用例编号用例名称简单描述1UC_01graph-input用户进行草图输入2UC_02graph-save用户对识别出来的图形进行保存3UC
4、_03graph-load用户读取已经保存的图形4UC_04graph-delete用户对识别出来的图形进行清空删除5UC_05graph-adjust用户对已绘制的图形进行调整6UC_06graph-handle对输入的草图进行的一系列处理过程7UC_07pre-handle系统对输入的草图进行预处理8UC_08graph-cut系统根据特征点进行图元的分割9UC_09graph-recognization系统对分割出来的图元进行识别10UC_10graph-rebuild系统根据划分出来的图元进行图形的重组11UC_11graph-reshape系统对重组出来的图形进行规整 12UC_12
5、graph-constraint系统对已有图形保持几何约束13UC_13graph-output系统输出一系列图形处理步骤后产生的图形4 设计概述4.1简述本系统主要采用面向对象设计、主机的结构模式进行开发,利用数学的几何知识进行求解问题。4.2 系统非功能描述、约束与估算系统非功能描述和约束如下表 任何一台具有一定的内存、无问题的CPU、一定的数据存储量的可使用的iPad即可。估算 暂无问题。4.3 系统的复用计划库、框架、模式、构件等方面的复用暂不考虑。4.4系统结构设计 4.4.1系统边界模型1.可有效识别出基本图形,比如直线,三角形,圆形等。2.同时具有实时调整图形的功能。3.提供保存
6、和重新载入功能。4.提供录音和录频的功能。5.提供笔形,笔色,背景色选择功能。6.提供坐标系坐标功能。4.4.2系统功能架构1、智能几何(smart geometry)系统技术框架主要包括七部分:笔交互信息收集,用户意图判断器,笔迹识别,图形选定,编辑,存储。2、笔交互信息收集:负责从外部硬件环境中获取最初的点集信息(Pen_Info),并对收集到的点集信息进行早期的预处理,包括平滑和消除躁点处理,最后得到经过预处理以后的点集信息信息,被称为笔迹(Stroke)。3、笔迹识别:分别对图元或者手势进行识别:<1>对图元的识别包括先对笔迹(Stroke)进行分割,产生一系列图元对象(G
7、unit)集合,并对其识别和重构,最终得到图形对象(Graph),其中图元对(Gunit)包括点图元(Point_Unit),直线图元(Line_Unit),曲线图元(Curve_Unit),图形对象(Graph)是由多个图元(Gunit)对象构成,包括点图形(Point_Graph),直线图形(Line_Graph),曲线图形(Curve_Graph)(圆,椭圆或者弧),三角形(Triangle_Graph),四边形(Rectangle_Graph),和特殊图形(Other_Graph)。<2>对手势的识别包括从专家库中获取判断手势意图的规则,最后识别出手势的意图。4、图形选定:
8、负责对存在约束的图形几何的选定,主要通过图形探查器对图形进行选定操作,选定的图形被称为Selected_Obj。5、编辑:用户进入编辑态时,可以对选定图形进行缩放,变形,移动,旋转四种编辑。6、存储:对用户操作完后的图形进行存储。4.4.3系统的逻辑架构 笔交互信息收集转换器:负责从外部硬件环境中获取最初的点集信息Pen_Info,并对Pen _Info进行早期预处理,包括平滑和消噪处理,最后得到经过预处理以后的点集信息,被称为笔迹Stroke。 用户意图判断器:负责从笔迹Stroke中判断用户意图,用户意图包括画图意图Sketch和手势意图Gesture。识别器:分别对图元和手势进行识别:对
9、图元的识别包括先对笔迹Stroke进行分割,产生一系列图元对象Gunit集合,并对其识别和重构,最终得到图形对象Graph,其中图元对象Gunit包括点图元Point_Unit、直线图元Line_Unit、曲线图元Curve_Unit,图形对象Graph是由多个图元Gunit对象构成,包括点图形Point_Graph、直线图形Line_Graph、曲线图形(圆、椭圆或者弧)Curve_Graph、三角形Triangle_Graph、四边形Rectangle_Graph、和非特殊图形Other_Graph;对手势的识别包括从专家库中获取判断手势意图的规则,最后识别出手势的意图。图形选定器:负责对
10、存在约束的图形几何的选定,主要通过图形探查器对图形进行选定操作,选定的图形被称为Selected_Obj,跟当前选中图形Selected_Obj存在约束的图形将通过约束探查器查找几何约束表来一起选定,一起选定的图形被放在一个链表里,该链表被称为Selected_Graph_List。 动态几何约束器:负责对存在约束的几何图形之间进行编辑操作时候的动态约束保持,核心模块为动态几何处理器,将存在几何约束的选中图形的集合Selected_Graph_List作为输入,可对改集合里面的图形进行旋转、平移、缩放和拖动顶点等编辑操作,用户进行编辑操作的时候,图形与图形之间的几何约束关系将得到动态保持。 存
11、储转换器:负责将图形的性质和图形跟其他图形之间的动态关系存储下来。 绘图器:负责图形和图形之间几何约束关系的表示以及其他特殊类型图形标识的绘制,其中每个图形可用用户自定义的画笔进行绘制,且图形与图形之间的几何约束和特殊类型图形的标识都采取常见的标识。4.4.4系统的物理架构 系统的运行环境:iOS操作系统(4.3及以上) 开发环境:Mac OS X Lion操作系统,Xcode4.4.5 系统数据模型编号名称说明1Point由两个整形组成,记录点的坐标2Vector<T>链表,用于记录数据类型为T的一系列数据3Gunit图元类,有一个List<Point>数据成员,表示
12、该图元的点信息4Constrain用于记录图形与图形的约束,由约束的类型和与其相关联的图形的指针5Line_unit直线图元类,是Gunit的子类,拥有Point类型的数据成员,分别表示直线的起点和终点,这条直线和效率的截距6Curve_unit二次曲线类,是Gunit的子类,拥有6个double类型的参数,分别是二次曲线方称Ax2 +Bxy+Cy2 +Dx+Ey+F=0 7Graph图形类,并具有一个vector<constraint>的约束列表记录与该图形有关的约束8Line_Graph包含一个line_unit,图形类的子类9Curve_Graph曲线图形,包含一个curve
13、_unit,图形类的子类10Triangle_Graph包含三个line_graph,用于直线的约束,也拥有三角形的约束11Rectangle_Graph包含四条直线12Other_Graph存储非二次曲线轨迹各个类的数据成员都设为 Public,可以直接通过点访问。 整个系统分为两部分数据:图形集和约束集 系统使用十字链表来存储图形,通过约束建立图形与图形之间的联系。在实现动态的约束保持的时候使用该十字链表,通过遍历有约束的图形从而得到一起变化的图形。4.5系统的接口设计4.5.1 用户接口基于笔交互的概念整个界面与传统 GUI 界面设计风格不同,本系统将提供一个简洁 的界面,只需要使用手指
14、就可以轻松地进行操作。在草图绘制勾画区域,落笔可以进行相应的草图绘制1、点击 Pen style 图标就可以进行笔形的选择2、点击 Pen Color 图标可以进行笔色选择3、点击 Record 图标再在里面选择开始,暂停,终止进行录制或者暂停终止等操作4、点击 save 图标,进行存储操作5、点击 Open 图标,选择需要打开的文件则可以重新载入原本的文件6、点击 clear 图标,就可以清除掉画板上的所有图形7、点击 chart 图标,可以坐标及坐标系8、点击 Minimum 图标,就可以将程序最小化9、点击 Exit 图标,就可以退出该运行程序 外部接口无 内部接口说明本系统之内的各个系
15、统元素之间的接口的安排。编号作用函数原型1预处理vector<Point> Pen_Info:getNewPen_Info()2特征点识别void Cut(vector<Point> pList,vector<Gunit> gList)3图元分割GUnit* GUnit:recognize(vector<Point> &pList)4图元重组bool Stroke:rebuild(vector<Point>& real,vector<int>& special)5图形规整void Holotacti
16、c(List<Graph> grList)6文件保存void CEditorView:save_file(CString filename)7文件加载void CEditorView:open_file(CString filename)8图形输出void CEditorView:paint_units_graphs()9约束识别void CEditorView:recognize_constrains(vector<Graph*> selected_list)4.6 系统约束与策略系统约束如下性能1、提供先进的识别技术,提高图形处理响应速度 2、草图识别的时间不超过0
17、.2s 3、容量上的扩展以及功能上的补充易维护本系统设计到很多维护的流程,应方便维护,以提高工作效率。 响应速度快系统在处理图形时,对系统延迟往往有一个忍耐极限,所以要求系统响应速度应在用户忍耐范围内。 稳定性1、故障间隔时间应大于 1000 小时 2、系统要保证数据的一致性,完整性,准确性要求达到99% 扩展性对新增业务,系统提供业务组件的动态部署功能,和平滑升级功能。 易操作性要求操作界面简单方便 4.6.2系统策略 采用原生的SDK,利用数学几何知识以及高斯离散维数积分的知识来提高性能。4.7 对象模型设计4.7.1 Stroke类属性/方法说明QList<Point> pL
18、ist定义一个存储一个笔迹当中所有点对象的动态数组QList<GUnit*> glist存放单个STROKE里面的图元Stroke(QList<Point> &) 构造函数,传入一次落笔提笔间所有的点对象Void find_Specialpoint(QList<Point> &);特征点识别void Speed(QList<Point> &)速度过滤方法:低于平均值的一定百分比算是特征点 void Curvity(QList<Point> &)曲率过滤void Direction(QList<Po
19、int> &)方向过滤void Space(QList<Point> &)进一步处理GUnit*recognize(QList<Point> &)识别各个图形的类别4.7.2 GUnit类属性/方法说明Point start起点Point end终点int type图元类型int id图元编号bool isSelected当前是否被选中 virtual void draw(QPainter &)接口函数,画出图元,继承的图元类实现virtual void translation(Point &)接口函数,平移图元,继承的图元
20、类实现virtual void rotation(qreal &)接口函数,旋转图元,继承的图元类实现virtual void scale(void)接口函数,放大图元,继承的图元类实现 4.7.3 Point_Unit类属性/方法说明qreal axisX 点的横坐标qreal axisY点的纵坐标void draw(QPainter&)画出点4.7.4 Line_Unit类属性/方法说明Point cut_point记录在与之相切的圆上的切点即在原点的情况下的圆的切点bool isCutLine是否是圆的切线bool judge(QList<Point>&
21、; )计算出直线的相关系数 通过相关系数进行判断是否为直线void draw(QPainter &)画出直线4.7.5 Curve_Unit类属性/方法说明qreal a,b,c,d,e,f为二次曲线的标准最简式a*x2+b*xy+c*y2+d*x+e*y+f=0的系数qreal major_axis,minor_axis长轴,短轴;major_axis是 x方向上的轴长;minor_axis 是 y方向上的轴长Point centre中心坐标Point f1,f2焦点Point move移动的向量坐标qreal alpha旋转角qreal start_angle, end_angle
22、画弧线时的起始角和终止角(并非是起始点、终点和原点的连线与坐标轴的夹角)在画二次曲线时有作用bool ellipse椭圆为true,圆为falsebool ishalfCurve如果是半个以上的二次弧线则为真,默认值是falseQList<Point> track非二次曲线轨迹bool IsSecDegreeCurv(QList<Point>& )如果是二次曲线返回true,如果是非二次曲线则返回falsevoid judge(QList<Point>&)判断是何种二次曲线bool Line_tangent(Line_Unit)计算一个曲线的
23、切线bool Line_Curve_CutPoint(qreal &,qreal&,qreal&,qreal&,qreal&,qreal &, qreal &,qreal &)求直线和曲线的切点,并进行判断,只有当该切点在该直线和曲线上时才返回真,/当draw为true的时候画出切点4.7.5 Graph类属性/方法说明int type用于存储时标识出图形的类型QList <Constraint> constraint_list存储与图形约束的其他图形信息int local_graph_id图形的IDbool isSe
24、lected是否被选中virtual bool recognize_constraint(Graph*,QList<Point_Graph*>&)识别图形与其他已存在的图形之间是否存在约束约束void construct_constraint(Graph*,Constraint_Type,Graph* ,Constraint_Type )如果存在约束,将约束构造出来virtual void translation(const QPointF &)虚函数,平移选定图形及其相应的约束virtual void rotation(const qreal&,const
25、 QPointF &)虚函数,旋转选定图形及其相应的约束virtual void scale(const qreal &)虚函数,放大或缩小选定图形及其相应的约束4.7.5 Point_Graph类属性/方法说明bool belong_to_rectangle是否在矩形上bool is_on_line是否在直线上bool vertex_of_special_line标识它是否为三角形特殊线的落在三角形边上的端点,在KEEP的时候有用bool cut_point_of_circles标识是否为两个圆的切点void keep_constraint(Point& )总领函数,
26、用于直接拖动点的时候用,传进一个点的坐标,然后根据点所在的直线的性质不同,传不同的参数给void keep_vertex_of_line(Graph*)当某一个顶点动了的时候,可以调用这个函数来调整那些以它作为端点的直线,而不是调用总的KEEP_CONSTRAINT4.7.6 Line_Graph类 属性/方法说明Line_Unit* line;指向相应的图元bool has_start,has_end;用于识别约束时表示直线的端点有没有跟点列表里面的点图形连到了一齐bool is_special用于标识直线是否为三角形的三角形的特殊线bool is_tangent用于标识直线是否为切线 vo
27、id recognize_constraint(QList<Point_Graph*> &)用以约束识别开始阶段时的直线和存在的点之间的约束识别void adjust_vertex(Point,int)用于固定一端后来根据一个直线上新的点来调整另一端的位置,0为start,1为endbool recognize_constraint(Graph* graph,QList<Point_Graph*>& point_list)总领的函数 int judge_legal_intersection(Line_Unit* ,Line_Unit* ,Point&am
28、p;)判断交点的属性bool judge_legal_intersection(Point )判断交点是否与直线上已有的点相同或很相近,若是的话则不必再生成新的点void keep_constraint()主要用于当直线的位置改变的时候,改变其上面存在的点的位置(非自身端点),然后再通过这些被改变的点去带动其他直线void keep_point_on_line(Point_Graph* )主要用于那些非限制点的位置变动 void keep_intersection_point(Point_Graph* )用于计算交点的新位置 4.7.7 Curve_Graph类属性/方法说明Curve_Uni
29、t* curve指向相应的图元bool recognize_externally_tangent_constrain(Triangle_Graph * )识别外切三角形 bool recognize_constraint(Curve_Graph*,QList<Point_Graph*>& )用于识别圆与圆之间的关系,内外切,或者相交bool recognize_constraint(Line_Graph*,QList<Point_Graph*>& )用于识别圆形与直线之间的关系,总领函数bool recognize_constraint(Triangle
30、_Graph*,QList<Point_Graph*> &)用于识别跟三角形的交点,非内切和外接 bool recognize_line_tangent_constrain(Line_Graph *)识别切线bool recognize_diameter(Line_Graph* ,QList<Point_Graph*> &)用于识别直径bool recognize_radius(Line_Graph* ,QList<Point_Graph *> &)用于识别半径bool recognize_common_line_constraint
31、(Line_Graph* ,QList<Point_Graph *> &)识别与直线的一般约束bool judge_recognization(Line_Graph*)判断是否应该进行直径半径和一般直线的识别int judge_legal_intersection(Line_Graph*,Point)判断直线与圆的交点是否符合条件:-1为不在直线上,0为在直线上,1为起点,2为末尾点void make_constraint(Line_Graph*,Point&,QList<Point_Graph*>& )生成直线和圆相交的点的有关约束bool recognize_constraint(Graph* ,QList<Point_Graph*>&)总领的函数4.7.8 Triangle_Graph类属性/方法说明QList<Line_Unit*> tr_lines指向三角形的各条边QList<Point> tr_vertexes存储三角形的各个点QList<qreal> tr_angles存储三角形的各个角QList<qreal> tr_lineDist存储三角形的边长int tr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年市场研究分析师考试试卷及答案
- 2025年环境科学与工程硕士考试试卷及答案
- 2025年非营利组织管理专业考试试卷及答案
- 2025年家庭教育指导师考试试题及答案集
- 火车、飞机、高铁接送服务补充协议
- 数字调音台租赁及网络直播音视频制作一体化服务协议
- 展会期间商标使用权及知识产权保护合同
- 生物实验动物养殖场地租赁与实验动物健康监测合同
- 游艇租赁业务保险经纪服务合同
- 股权转让及股权激励计划登记协议
- GB/T 45403-2025数字化供应链成熟度模型
- 咸宁叉车考试题及答案
- 2025春 新人教版美术小学一年级下册走进旧时光
- 腹腔引流管护理查房
- 利用导函数研究极值点偏移(4题型+高分技法+限时提升练)-2025年北京高考数学复习专练(原卷版)
- 渣土公司运输车辆管理制度
- 2025-2030中国电力薄膜电容器行业市场发展趋势与前景展望战略研究报告
- 中石化员工合同范例
- 2025中考语文常考作文押题(10大主题+10篇范文)
- YY频道模板文档
- 汽车营销专业毕业论文
评论
0/150
提交评论