南师大人机交互技术复习提纲.docx
- 文档编号:13268052
- 上传时间:2023-06-12
- 格式:DOCX
- 页数:20
- 大小:65.91KB
南师大人机交互技术复习提纲.docx
《南师大人机交互技术复习提纲.docx》由会员分享,可在线阅读,更多相关《南师大人机交互技术复习提纲.docx(20页珍藏版)》请在冰点文库上搜索。
南师大人机交互技术复习提纲
人机交互技术复习提纲
1文件系统
1请定义一个类,存储管理指定文件夹下的所有文件名及其属性,写出该类的构造函数。
指出该类的应用背景。
ClassclsDirectory
PrivateFileNamesAsList(OfString)
PrivateLVasList(OfListViewItem)
Endclass
SubNew(pathnameasstring)
FileNames=Directory.GetFiles(PathName).ToList//得到文件名的集合
LV=newList(OfListViewItem)
Fori=0ToFileNames.Count–1
Item=newListViewItem
Item.SubItems.Add(…FileNames(i).…)//设置属性项目:
创建时间、大小
LV.Add(Item)
Next
EndSub
应用背景:
在ListView控件中,显示查询文件属性列表
1请定义一个类,存储管理指定文件夹下的所有子文件夹,写出该类的构造函数。
ClassclsDirectory
privatefoldnamesAslist(ofstring)//子文件夹的名称集合
publicNodeAsTreeNode'TreeView中的对应节点
Endclass
SubNew(pathnameasstring)
foldnames=Directory.GetDirectories(pathname).Tolist
iffoldnames.count=0thenNode=nothing:
Return
Node=NewTreeNode(pathname)
Fori=0tofoldnames.count-1
DimNodeiasclsDirectory=NewclsDirectory(foldnames(i))
node.Nodes.Add(Nodei.Node)
Next
EndSub
应用背景:
在TreeView控件中,显示查询目录树结构
2TreeView控件
1请编写函数,将指定的Tuple类型数据(例如:
(“dad”,”son”))插入到TreeView控件中。
SubInsert(tvasTreeView,tasTuple
Node=Find(tv.Root,t.item1)//找插入的节点
Node.children.add(t.item12)//加入新节点
Endsub
FunctionFind(NodeasTreeViewNode,keyasstring)asTreeViewNode
Ifnode.Text=keyThenReturnnode
Fori=0toNode.children.count-1
Dimnode1AsTreeNode=Find(Node.children(i),key)
Ifnode1isnothingthenreturnnode1
Nexti
Returnnothing
EndFunction
1请编写函数,在TreeView控件中,删除text属性等于指定字符串key的结点及其子树。
SubDelete(tvasTreeView,keyasstring)
Node=Find(tv.Root,key)//找待删除的节点的父节点
ParentNode=Node.Parent()
parentnode.Nodes.Remove(node)
Endsub
FunctionFind(NodeasTreeViewNode,vasstring)asTreeViewNode
同上
3动态控件
1请编写函数,创建一列n个按钮控件,并指定每个按钮的Click事件。
Functionf(n)aslist(ofButton)
DimButtonsasnewlist(ofButton)
Fori=0ToN-1
Buttons.Add(NewButton)
AddHandlerButtons(i).Click,AddressOfButton_Click
Next
ReturnButtons
Endsub
1请编写函数,创建一列n个文本控件,并指定每个文本控件的TextChange事件。
Functionf(n)aslist(oftextBox)
DimtextBoxsasnewlist(oftextBox)
Fori=0ToN-1
textBoxs.Add(NewtextBox)
AddHandlertextBoxs(i).TextChange,AddressOfTextBox_TextChange
Next
ReturnTextBoxs
Endsub
4线程之间的操作
1在窗体frmTest的列表框lstMessage中,显示另一个线程对象FileSystemWatcher的信息。
请说明之间的流程。
一个窗口对应一个线程,该线程拥有读写窗口中控件的权利。
这意味着另一个线程对象不能拥有这种权利,否则无法保证控件数据的合法性。
PublicClassfrmTest
SubDisplay(msgasstring)
lstMessage.items.add(msg)
End
DelegateSubAppendMessage(msgAsString)//委托类型:
函数指针类型
PrivateoutputasAppendMessage//委托对象:
具体的函数地址
PrivateSubfrmTest_Load()
output=newAppendMessage(addressMe.Display)
EndSub
PublicWithEventsWatcherAsFileSystemWatcher//另一个线程对象:
能接受事件
PrivateSubWatcher_Created(e)//文件系统发生创建文件的事件
DimfilenameAsString=e.FullPath
Invoke(output,filename)
EndSub
5自定义事件
1以绘图程序为例,说明自定义事件的使用方法。
在图形对象集合中,设置事件,以便在集合发生变化时,界面进行绘图操作。
ClassclsElems//图形对象集合类
Privateelemsaslist(ofElem)
EventAppend()//定义事件
SubAppend(easElem)
Elems.Add(e)
RaiseEventAppend()//产生事件
Endsub
Endclass
frmTest:
界面类
dimwithEventsElemsasclsElems//能够接受事件
SubDraw()handleElems.Append//响应事件
clsElems.Draw(…..)
EndSub
endsub
1以智能输入为例,说明自定义事件的使用方法。
PublicClassfrmListBox
PublicEventCharPress(CAsChar)//定义事件
PrivateSublstWords_KeyPress(e)
…..
RaiseEventCharPress(e.KeyChar)'产生事件
EndSub
EndClass
PublicClassfrmTest
DimWithEventsfrmAsfrmListBox//能够接受事件
PrivateSubfrm_CharPress(CAsChar)Handlesfrm.CharPress//响应事件
txtContent.SelectedText=C
EndSub
EndClass
6多线程与并行
1设某计算任务由整数参数n1…n2决定,需要消耗较长时间,可能导致界面无法响应事件。
使用BackgroundWorker对象可以解决此类问题。
请说明使用BackgroundWorker对象的方法,要求在计算完成时,将结果输出。
StructureWorkerPara
Dimn1AsInteger
Dimn2AsInteger
EndStructure
PublicClassfrmTest
DimbkWorkAsBackgroundWorker
PrivateSubbtnStart_Click()
DimparaAsWorkerPara={1000,100000}
bkWork.RunWorkerAsync(para)
EndSub
PrivateSubbkWork_DoWork()…..
DimparaAsWorkerPara=e.Argument'提取所需的所有参数
DimsumAsSingle=js(para.n1,para.n2)'计算任务
e.Result=sum'将计算结果赋给Result属性(Object类型)。
EndSub
PrivateSubbkWork_RunWorkerCompleted()…//在计算完成时,将结果输出
txtResult.Text=e.Result
EndSub
1请举例说明Parallel.For的使用方法。
PublicClassclsParallelArray
ConstElemCountAsInteger=100000
PrivateA(ElemCount)AsSingle
PublicsubRunParallel()'启动并行处理
TaskCountAsInteger=10'并行的任务个数
'将任务分成TaskCount个子任务:
编号为[0,TaskCount-1]
Parallel.For(0,100,AddressOfDoParallel)
EndFunction
PrivateSubDoParallel(iAsInteger)'安排并行子任务的参数
'根据子任务的编号i,计算子任务的参数
Dimn1AsInteger=ElemCount/TaskCount'子任务计算的数据个数
DimsiAsInteger=i*n1'子任务计算的起始下标
Do1(si,n1)'每个任务的计算范围A(si)...A(si+n1-1)
EndSub
'执行每个并行子任务
PrivateSubDo1(siAsInteger,n1AsInteger)
ForI=siTosi+n1-1
A(I)=……
Next
EndSub
7命令序列、正则表达式
1在文本编辑中,常常有对命令序列的管理要求。
请写出基本操作的类型定义,及命令序列的存储结构。
PublicMustInheritClassclsOp
PublicMustOverrideSubDoWork(txtContentAsTextBox)//虚函数
PublicMustOverrideSubUnDo(txtContentAsTextBox)
EndClass
PublicClassclsInsertOp
InheritsclsOp
PrivatepositionAsInteger,newcharsAsString
EndClass
PublicClassclsDeleteOp
InheritsclsOp
PrivatepositionAsInteger,lengthAsInteger
PrivatedeletetxtAsString'删除的文本
EndClass
PublicClassclsOps
PrivatetxtContentAsTextBox
PrivateOpsAsList(OfclsOp),ithAsInteger
PublicSubUndo()
Ops(ith-1).UnDo(txtContent)
ith-=1
EndSub
PublicSubRedo()
Ops(ith).DoWork(txtContent)
ith+=1
EndSub
EndClass
2在读结构化文本文件、分析行命令时,正则表达式有广泛的应用。
请举例说明之。
8图像运算
1在图像处理中,位图的数据类型是什么?
请写出读写像素的函数,颜色值的分解组合函数?
DimSourceAsBitmap=NewBitmap(“…….”)
Source.Save(“…….”)
DimcAsColor=Target.GetPixel(p.X,p.Y)
Target.SetPixel(p.X,p.Y,c)
DimcAsColor=Color.FromArgb(255,0,0)
R=c.red
2在播放幻灯片时,有许多图像切换特效。
请举例说明其实现方法。
PublicClassclsTimer
PrivateImageAsBitmap,gasGraphics
PrivateTimerAsTimer
PublicSubNew(gasGraphics)
Image=NewBitmap(“…….”)
Me.g=g
Timer=NewTimer
AddHandlerTimer.Tick,AddressOfTimerTick
Timer.Enabled=True
EndSub
PrivateSubTimerTick()
……
g.DrawImage(Image,rect1,rect2,…)
EndSub
3区域选择是图像处理中的基本操作,请说明区域选择的方法,区域的数据结构,及可能的操作。
图的遍历操作
9基于矩阵的线性变换
1绘图软件和图像处理中,都存在线性变换,请写出平移、变比、旋转的变换矩阵。
2请写出绕指定点
旋转θ角的变换矩阵。
①
将原点平移到
②
绕原点逆时针旋转θ角
③
将原点平移到
总变换矩阵
3绘图软件中,用户应能设定作图的范围,并在该范围内利用鼠标绘图。
请写出实现方法。
将自定义坐标系中的坐标转换为像素点坐标,用于绘图
将鼠标点坐标(像素),转换为自定义坐标系中的坐标,用于创建图形对象
10动态绘图技术
1绘图软件中,创建图形对象中的橡皮筋技术,极大的改善了绘图界面,请说明其中的事件流程。
以绘制直线段为例说明
DimspAsPointF'临时变量,用于创建Line,Rectangle
DimlastelemAsclsElem=Nothing
PrivateSubpicCanvas_MouseDown()
sp=e.Location
EndSub
PrivateSubpicCanvas_MouseMove()
IflastelemIsNotNothingThen
lastelem.Draw(g,bkcolor)'擦出旧的临时对象
EndIf
DimepAsPointF=e.Location
lastelem=NewclsLine(sp,ep)'创建新的临时对象
lastelem.Draw(g)'绘制新的临时对象
EndSub
PrivateSubpicCanvas_MouseUp()
DimepAsPointF=e.Location
lastelem=Nothing
Elems.Append(NewclsLine(sp,ep))
EndSub
1绘图软件中,编辑图形对象中的拖动技术,极大的改善了绘图界面,请说明其中的事件流程。
拖动的过程:
擦除旧的影子,绘制新的影子
以平移为例:
DimShadowAsclsSelection'被拖动的选集的影子
DimspAsPointF
DimLastMAsclsMatrix3'拖动过程中的"上一次矩阵"
PrivateSubpicCanvas_MouseDown()
sp=e.Location
Shadow=Elems.Selection.Clone()
LastM=Nothing
EndSub
PrivateSubpicCanvas_MouseMove()
DimepAsPointF=e.Location
StaticspAsPointF
IfLastMIsNothingThen
sp=Me.sp'拖动开始时的起点(拖动过程中Me.sp保持不变)
Else
Shadow.Draw(picCanvas.CreateGraphics,LastM,ObjectState.None)'擦出旧影子
EndIf
M.SetPan(ep.X-sp.X,ep.Y-sp.Y)'影子移动一小步
Shadow.Transform(M)
Shadow.Draw(picCanvas.CreateGraphics,M,ObjectState.Drag)'绘制新的影子
LastM=M
sp=ep
EndSub
PrivateSubpicCanvas_MouseUp()
DimmAsclsMatrix3=NewclsMatrix3
m.SetPan(ep.X-sp.X,ep.Y-sp.Y)
Elems.Transform(m)
EndSub
11图形对象的选择技术
1绘图软件中,图形对象的管理是如何实现的?
请写出图元类的结构定义。
PublicMustInheritClassclsElem
PublicMustOverrideSubDraw(gAsGraphics)
EndClass
ClassclsLine
InheritsclsElem
PublicOverridesSubDraw(gAsGraphics)
g.DrawLine(CommonPen,Sp,Ep)
EndSub
EndClass
PublicClassclsElems
PublicelemsAsList(OfclsElem)
PublicSubDraw(ByValgAsGraphics)
Fori=0Toelems.Count-1
elems(i).Draw(g)
Next
EndSub
EndClass
1绘图软件中,图形对象的点选择,是如何实现的?
请写出相关的类中的方法接口。
PublicMustInheritClassclsElem
PublicMustOverrideFunctionSelectByPoint(ByValpAsPointF)AsBoolean
EndClass
ClassclsLine
InheritsclsElem
PublicOverridesFunctionSelectByPoint(ByValpAsPointF)AsBoolean
…….
EndFunction
EndClass
PublicClassclsElems
PublicFunctionSelectByPoint(ByValpAsPointF)asclsElem
Fori=0ToElems.Count-1
IfElems(i).SelectByPoint(p)=TrueThen
ReturnElems(i)
EndIf
Next
ReturnNothing
EndSub
EndClass
1已知两点坐标p1(x1,y1),p2(x2,y2),请写出直线段的参数方程;并写出点p(x0,y0)与直线段p1p2的距离计算方法。
直线段的参数方程
…………①
直线段的单位方向向量:
过任一点p(x0,y0)垂直于p1p2的直线方程:
…………②
计算式1与式2的交点。
若t=[0,1],则存在交点。
否则不存在交点。
12图形对象的层次结构
1良好的绘图软件,应该支持层次化的图形对象结构。
请写出自定义块类和块插入对象类的定义。
'块:
保管着被选择的图形对象的副本的集合
PublicClassclsBlock
PrivateElemsAsList(OfclsElem)
PrivateBasePointAsPointF
EndClass
'块插入对象:
保管着块的引用,及变换矩阵
PublicClassclsBlockInsert
InheritsclsElem
PrivateBlockAsclsBlock
PrivateMAsclsMatrix3'对Block中所有图形对象的变换矩阵
EndClass
1良好的绘图软件,应该支持层次化的图形对象结构。
请写出块插入对象类的绘图函数定义。
PublicClassclsBlockInsert
InheritsclsElem
PrivateBlockAsclsBlock
PrivateMAsclsMatrix3'对Block中所有图形对象的变换矩阵
PublicOverridesSubDraw(ByValgAsGraphics)
Fori=0ToBlock.Count-1
Block.Item(i).Draw(g,M)
Next
EndSub
13图形对象的属性管理
1在绘图软件中,层对象是如何实现属性管理的?
PublicClassclsLayer
PublicNameAsSt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南师大 人机交互 技术 复习 提纲