IT项目管理详细设计文档.doc
《IT项目管理详细设计文档.doc》由会员分享,可在线阅读,更多相关《IT项目管理详细设计文档.doc(15页珍藏版)》请在冰点文库上搜索。
SmartGeometry
详细设计说明书
ITProjectManagement
SCUT
Copyright
1概述
1.1系统简述
由于目前的主流电子课件系统,无法满足教师在课堂教学互动中需要与用户界面自然、高效、连续性交互的要求。
我们准备用我们的实际行动来试图改变这一现状,本项目拟实现一个能在ipad上运行的智能几何教育平台,其功能包括草图识别,手势识别,动态几何约束等。
由于时间有限,动态几何约束求解与动态几何可视化这部分的功能暂不准备实现。
非功能性的需求有系统出错处理及易操作性。
1.2软件设计目标
本项目系统概要设计说明书是基于SmartGeometry智能几何教育平台需求分析书进行编写的。
该项目将以笔代替鼠标键盘,能够连续添加笔迹批注,勾画并识别几何草图,用笔手势操纵界面元素。
本概要设计同时也是为详细设计及后续开发,提供指导作用。
预期的读者:
详细设计人员
开发人员
测试人员
用户
1.3参考资料
《ipad开发应用实战》,《iphone4与ipad开发基础教程》,《Objective-c基础教程》,《ipad开发基础教程》,《ipad应用开发实例》。
2术语表
本文档所涉及到的属于包含如下:
1、Stroke:
笔迹,用户一次落笔提笔
2、Pen_Info:
预处理
3、Graph:
图形类
4、Guint:
图元类
5、Graph_Edit:
图形编辑类
6、Constraint:
图形与图形之间的约束,一个图形拥有多个约束,由约束的类型来标识。
7、特征点:
用于划分图元的点,比如三角形的顶点。
8、点集:
一系列点的集合
9、图元:
组成图形的最小单位,比如三角形的边。
10、双线程:
当开始录制视频时,创建新的线程进行录制操作。
11、切割:
通过特征点来划分点集属于的图元类型。
12、拟合:
将被划分好的图元计算出最能代表该点集的方程表达式。
3用例
上图表明使用本系统的用户需要打开软件系统,就能使用系统,用户输入图形进行草图识别,并可以对识别出来的图形进行清空、保存等功能。
用例描述
序号
用例编号
用例名称
简单描述
1
UC_01
graph-input
用户进行草图输入
2
UC_02
graph-save
用户对识别出来的图形进行保存
3
UC_03
graph-load
用户读取已经保存的图形
4
UC_04
graph-delete
用户对识别出来的图形进行清空删除
5
UC_05
graph-adjust
用户对已绘制的图形进行调整
6
UC_06
graph-handle
对输入的草图进行的一系列处理过程
7
UC_07
pre-handle
系统对输入的草图进行预处理
8
UC_08
graph-cut
系统根据特征点进行图元的分割
9
UC_09
graph-recognization
系统对分割出来的图元进行识别
10
UC_10
graph-rebuild
系统根据划分出来的图元进行图形的重组
11
UC_11
graph-reshape
系统对重组出来的图形进行规整
12
UC_12
graph-constraint
系统对已有图形保持几何约束
13
UC_13
graph-output
系统输出一系列图形处理步骤后产生的图形
4设计概述
4.1简述
本系统主要采用面向对象设计、主机的结构模式进行开发,利用数学的几何知识进行求解问题。
4.2系统非功能描述、约束与估算
4.2.1系统非功能描述和约束如下表
任何一台具有一定的内存、无问题的CPU、一定的数据存储量的可使用的iPad即可。
4.2.2估算
暂无问题。
4.3系统的复用计划
库、框架、模式、构件等方面的复用暂不考虑。
4.4系统结构设计
4.4.1系统边界模型
1.可有效识别出基本图形,比如直线,三角形,圆形等。
2.同时具有实时调整图形的功能。
3.提供保存和重新载入功能。
4.提供录音和录频的功能。
5.提供笔形,笔色,背景色选择功能。
6.提供坐标系坐标功能。
4.4.2系统功能架构
1、智能几何(smartgeometry)系统技术框架主要包括七部分:
笔交互信息收集,用户意图判断器,笔迹识别,图形选定,编辑,存储。
2、笔交互信息收集:
负责从外部硬件环境中获取最初的点集信息(Pen_Info),并对收集到的点集信息进行早期的预处理,包括平滑和消除躁点处理,最后得到经过预处理以后的点集信息信息,被称为笔迹(Stroke)。
3、笔迹识别:
分别对图元或者手势进行识别:
<1>对图元的识别包括先对笔迹(Stroke)进行分割,产生一系列图元对象(Gunit)集合,并对其识别和重构,最终得到图形对象(Graph),其中图元对(Gunit)包括点图元(Point_Unit),直线图元(Line_Unit),曲线图元(Curve_Unit),图形对象(Graph)是由多个图元(Gunit)对象构成,包括点图形(Point_Graph),直线图形(Line_Graph),曲线图形(Curve_Graph)(圆,椭圆或者弧),三角形(Triangle_Graph),四边形(Rectangle_Graph),和特殊图形(Other_Graph)。
<2>对手势的识别包括从专家库中获取判断手势意图的规则,最后识别出手势的意图。
4、图形选定:
负责对存在约束的图形几何的选定,主要通过图形探查器对图形进行选定操作,选定的图形被称为Selected_Obj。
5、编辑:
用户进入编辑态时,可以对选定图形进行缩放,变形,移动,旋转四种编辑。
6、存储:
对用户操作完后的图形进行存储。
4.4.3系统的逻辑架构
笔交互信息收集转换器:
负责从外部硬件环境中获取最初的点集信息Pen_Info,并对Pen_Info进行早期预处理,包括平滑和消噪处理,最后得到经过预处理以后的点集信息,被称为笔迹Stroke。
用户意图判断器:
负责从笔迹Stroke中判断用户意图,用户意图包括画图意图Sketch和手势意图Gesture。
识别器:
分别对图元和手势进行识别:
对图元的识别包括先对笔迹Stroke进行分割,产生一系列图元对象Gunit集合,并对其识别和重构,最终得到图形对象Graph,其中图元对象Gunit包括点图元Point_Unit、直线图元Line_Unit、曲线图元Curve_Unit,图形对象Graph是由多个图元Gunit对象构成,包括点图形Point_Graph、直线图形Line_Graph、曲线图形(圆、椭圆或者弧)Curve_Graph、三角形Triangle_Graph、四边形Rectangle_Graph、和非特殊图形Other_Graph;对手势的识别包括从专家库中获取判断手势意图的规则,最后识别出手势的意图。
图形选定器:
负责对存在约束的图形几何的选定,主要通过图形探查器对图形进行选定操作,选定的图形被称为Selected_Obj,跟当前选中图形Selected_Obj存在约束的图形将通过约束探查器查找几何约束表来一起选定,一起选定的图形被放在一个链表里,该链表被称为Selected_Graph_List。
动态几何约束器:
负责对存在约束的几何图形之间进行编辑操作时候的动态约束保持,核心模块为动态几何处理器,将存在几何约束的选中图形的集合Selected_Graph_List作为输入,可对改集合里面的图形进行旋转、平移、缩放和拖动顶点等编辑操作,用户进行编辑操作的时候,图形与图形之间的几何约束关系将得到动态保持。
存储转换器:
负责将图形的性质和图形跟其他图形之间的动态关系存储下来。
绘图器:
负责图形和图形之间几何约束关系的表示以及其他特殊类型图形标识的绘制,其中每个图形可用用户自定义的画笔进行绘制,且图形与图形之间的几何约束和特殊类型图形的标识都采取常见的标识。
4.4.4系统的物理架构
系统的运行环境:
iOS操作系统(4.3及以上)
开发环境:
MacOSXLion操作系统,Xcode
4.4.5系统数据模型
编号
名称
说明
1
Point
由两个整形组成,记录点的坐标
2
Vector
链表,用于记录数据类型为T的一系列数据
3
Gunit
图元类,有一个List数据成员,表示该图元的点信息
4
Constrain
用于记录图形与图形的约束,由约束的类型和与其相关联的图形的指针
5
Line_unit
直线图元类,是Gunit的子类,拥有Point类型的数据成员,分别表示直线的起点和终点,这条直线和效率的截距
6
Curve_unit
二次曲线类,是Gunit的子类,拥有6个double类型的参数,分别是二次曲线方称Ax2+Bxy+Cy2+Dx+Ey+F=0
7
Graph
图形类,并具有一个vector的约束列表记录与该图形有关的约束
8
Line_Graph
包含一个line_unit,图形类的子类
9
Curve_Graph
曲线图形,包含一个curve_unit,图形类的子类
10
Triangle_Graph
包含三个line_graph,用于直线的约束,也拥有三角形的约束
11
Rectangle_Graph
包含四条直线
12
Other_Graph
存储非二次曲线轨迹
各个类的数据成员都设为Public,可以直接通过点访问。
整个系统分为两部分数据:
图形集和约束集系统使用十字链表来存储图形,通过约束建立图形与图形之间的联系。
在实现动态的约
束保持的时候使用该十字链表,通过遍历有约束的图形从而得到一起变化的图形。
4.5系统的接口设计
4.5.1用户接口
基于笔交互的概念整个界面与传统GUI界面设计风格不同,本系统将提供一个简洁的界面,只需要使用手指就可以轻松地进行操作。
在草图绘制勾画区域,落笔可以进行相应的草图绘制
1、点击Penstyle图标就可以进行笔形的选择
2、点击PenColor图标可以进行笔色选择
3、点击Record图标再在里面选择开始,暂停,终止进行录制或者暂停终止等操作
4、点击save图标,进行存储操作
5、点击Open图标,选择需要打开的文件则可以重新载入原本的文件
6、点击clear图标,就可以清除掉画板上的所有图形
7、点击chart图标,可以坐标及坐标系
8、点击Minimum图标,就可以将程序最小化
9、点击Exit图标,就可以退出该运行程序
4.5.2外部接口
无
4.5.3内部接口
说明本系统之内的各个系统元素之间的接口的安排。
编号
作用
函数原型
1
预处理
vectorPen_Info:
:
getNewPen_Info()
2
特征点识别
voidCut(vectorpList,vectorgList)
3
图元分割
GUnit*GUnit:
:
recognize(vector&pList)
4
图元重组
boolStroke:
:
rebuild(vector&real,vector&special)
5
图形规整
voidHolotactic(ListgrList)
6
文件保存
voidCEditorView:
:
save_file(CStringfilename)
7
文件加载
voidCEditorView:
:
open_file(CStringfilename)
8
图形输出
voidCEditorView:
:
paint_units_graphs()
9
约束识别
voidCEditorView:
:
recognize_constrains(vectorselected_list)
4.6系统约束与策略
4.6.1系统约束如下
性能
1、提供先进的识别技术,提高图形处理响应速度
2、草图识别的时间不超过0.2s
3、容量上的扩展以及功能上的补充
易维护
本系统设计到很多维护的流程,应方便维护,以提高工作效率。
响应速度快
系统在处理图形时,对系统延迟往往有一个忍耐极限,所以要求系统响应速度应在用户忍耐范围内。
稳定性
1、故障间隔时间应大于1000小时
2、系统要保证数据的一致性,完整性,准确性要求达到99%
扩展性
对新增业务,系统提供业务组件的动态部署功能,和平滑升级功能。
易操作性
要求操作界面简单方便
4.6.2系统策略
采用原生的SDK,利用数学几何知识以及高斯离散维数积分的知识来提高性能。
4.7对象模型设计
4.7.1Stroke类
属性/方法
说明
QListpList
定义一个存储一个笔迹当中所有点对象的动态数组
QListglist
存放单个STROKE里面的图元
Stroke(QList&)
构造函数,传入一次落笔提笔间所有的点对象
Voidfind_Specialpoint(QList&);
特征点识别
voidSpeed(QList&)
速度过滤方法:
低于平均值的一定百分比算是特征点
voidCurvity(QList&)
曲率过滤
voidDirection(QList&)
方向过滤
voidSpace(QList&)
进一步处理
GUnit*recognize(QList&)
识别各个图形的类别
4.7.2GUnit类
属性/方法
说明
Pointstart
起点
Pointend
终点
inttype
图元类型
intid
图元编号
boolisSelected
当前是否被选中
virtualvoiddraw(QPainter&)
接口函数,画出图元,继承的图元类实现
virtualvoidtranslation(Point&)
接口函数,平移图元,继承的图元类实现
virtualvoidrotation(qreal&)
接口函数,旋转图元,继承的图元类实现
virtualvoidscale(void)
接口函数,放大图元,继承的图元类实现
4.7.3Point_Unit类
属性/方法
说明
qrealaxisX
点的横坐标
qrealaxisY
点的纵坐标
voiddraw(QPainter&)
画出点
4.7.4Line_Unit类
属性/方法
说明
Pointcut_point
记录在与之相切的圆上的切点即在原点的情况下的圆的切点
boolisCutLine
是否是圆的切线
booljudge(QList&)
计算出直线的相关系数通过相关系数进行判断是否为直线
voiddraw(QPainter&)
画出直线
4.7.5Curve_Unit类
属性/方法
说明
qreala,b,c,d,e,f
为二次曲线的标准最简式a*x^2+b*xy+c*y^2+d*x+e*y+f=0的系数
qrealmajor_axis,minor_axis
长轴,短轴;major_axis是x方向上的轴长;minor_axis是y方向上的轴长
Pointcentre
中心坐标
Pointf1,f2
焦点
Pointmove
移动的向量坐标
qrealalpha
旋转角
qrealstart_angle,end_angle
画弧线时的起始角和终止角(并非是起始点、终点和原点的连线与坐标轴的夹角)在画二次曲线时有作用
boolellipse
椭圆为true,圆为false
boolishalfCurve
如果是半个以上的二次弧线则为真,默认值是false
QListtrack
非二次曲线轨迹
boolIsSecDegreeCurv(QList&)
如果是二次曲线返回true,如果是非二次曲线则返回false
voidjudge(QList&)
判断是何种二次曲线
boolLine_tangent(Line_Unit)
计算一个曲线的切线
boolLine_Curve_CutPoint(qreal&,qreal&,qreal&,qreal&,qreal&,qreal&,qreal&,qreal&)
求直线和曲线的切点,并进行判断,只有当该切点在该直线和曲线上时才返回真,//当draw为true的时候画出切点
4.7.5Graph类
属性/方法
说明
inttype
用于存储时标识出图形的类型
QListconstraint_list
存储与图形约束的其他图形信息
intlocal_graph_id
图形的ID
boolisSelected
是否被选中
virtualboolrecognize_constraint(Graph*,QList&)
识别图形与其他已存在的图形之间是否存在约束约束
voidconstruct_constraint(Graph*,Constraint_Type,Graph*,Constraint_Type)
如果存在约束,将约束构造出来
virtualvoidtranslation(constQPointF&)
虚函数,平移选定图形及其相应的约束
virtualvoidrotation(constqreal&,constQPointF&)
虚函数,旋转选定图形及其相应的约束
virtualvoidscale(constqreal&)
虚函数,放大或缩小选定图形及其相应的约束
4.7.5Point_Graph类
属性/方法
说明
boolbelong_to_rectangle
是否在矩形上
boolis_on_line
是否在直线上
boolvertex_of_special_line
标识它是否为三角形特殊线的落在三角形边上的端点,在KEEP的时候有用
boolcut_point_of_circles
标识是否为两个圆的切点
voidkeep_constraint(Point&)
总领函数,用于直接拖动点的时候用,传进一个点的坐标,然后根据点所在的直线的性质不同,传不同的参数给
voidkeep_vertex_of_line(Graph*)
当某一个顶点动了的时候,可以调用这个函数来调整那些以它作为端点的直线,而不是调用总的KEEP_CONSTRAINT
4.7.6Line_Graph类
属性/方法
说明
Line_Unit*line;
指向相应的图元
boolhas_start,has_end;
用于识别约束时表示直线的端点有没有跟点列表里面的点图形连到了一齐
boolis_special
用于标识直线是否为三角形的三角形的特殊线
boolis_tangent
用于标识直线是否为切线
voidrecognize_constraint(QList&)
用以约束识别开始阶段时的直线和存在的点之间的约束识别
voidadjust_vertex(Point,int)
用于固定一端后来根据一个直线上新的点来调整另一端的位置,0为start,1为end
boolrecognize_constraint(Graph*graph,QList&point_list)
总领的函数
intjudge_legal_intersection(Line_Unit*,Line_Unit*,Point&)
判断交点的属性
booljudge_legal_intersection(Point)
判断交点是否与直线上已有的点相同或很相近,若是的话则不必再生成新的点
voidkeep_constraint()
主要用于当直线的位置改变的时候,改变其上面存在的点的位置(非自身端点),然后再通过这些被改变的点去带动其他直线
voidkeep_point_on_line(Point_Graph*)
主要用于那些非限制点的位置变动
voidkeep_intersection_point(Point_Graph*)
用于计算交点的新位置
4.7.7Curve_Graph类
属性/方法
说明
Curve_Unit*curve
指向相应的图元
boolrecognize_externally_tangent_constrain(Triangle_Graph*)
识别外切三角形
boolrecognize_constraint(Curve_Graph*,QList&)
用于识别圆与圆之间的关系,内外切,或者相交
boolrecognize_constraint(Line_Graph*,QList&)
用于识别圆形与直线之间的关系,总领函数
boolrecognize_constraint(Triangle_Graph*,QList&)
用于识别跟三角形的交点,非内切和外接
boolrecognize_line_tangent_constrain(Line_Graph*)
识别切线
boolrecognize_diameter(Line_Graph*,QList&)
用于识别直径
boolrecognize_radius(Line_Graph*,QList&)
用于识别半径
boolrecognize_common_line_constraint(Line_Graph*,QList&)
识别与直线的一般约束
booljudge_recognization(Line_Graph*)
判断是否应该进行直径半径和一般直线的识别
intjudge_legal_intersection(Line_Graph*,Point)
判断直线与圆的交点是否符合条件:
-1为不在直线上,0为在直线上,1为起点,2为末尾点
voidmake_constraint(Line_Graph*,Point&,QList&)
生成直线和圆相交的点的有关约