




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要随机行走也叫无规则行走,是物理上的布朗运动。该软件通过使用win32的窗口程序模式,实现随机行走路径图形生成程序的设计与开发;给出了随机数发生器的参数控制接口,允许用户在控制范围内自由选择参数;支持四方向和八方向的绝对方向模式和相对方向模式;提供无轨迹模式,拖尾型轨迹模式,单点轨迹模式生成模式。该软件设计通过使用masmpluswin32的窗口程序模式来实现。关键词: 随机数发生器 ; 二维随机行走;越界检查1目录摘要11.问题描述22.系统设计32.1.功能模块32.2工作流程图43.系统实现54.系统测试84.1测试的目的84.2 测试方案84.3测试结果84.3.1.拖尾型轨迹四方向绝对测试:84.3.2.拖尾型轨迹四方向相对测试:94.3.3.拖尾型轨迹八方向绝对测试:94.3.4.拖尾型轨迹八方向向对测试:104.3.5.无轨迹绝对四方向测试:104.3.6.单点轨迹绝对四方向测试:114.4 可行性分析11总结12参考文献13源代码141.问题描述 随机行走也叫无规则行走,是物理上的布朗运动。从最初的无规则分子热运动、微观粒子的运动形成模型的研究,已广泛应用到了物理学、化学、结晶学、天文学、生物学、气象学、流体力学、经济学、交通等许多领域,并且发挥着重要作用。目前已有许多随机行走模型,如简单随机行走、对称随机行走、带有吸收壁的随机行走、格点上的随机行走等等。无规则行走在任意尺度上都具有相似结构。而扩散以一个初始分布释放大量的无规则行走,观察他们的密度就会得到分布函数,这就是多目标随机行走问题研究的重点。本设计开发一个基于多目标的二维随机行走计算机模拟系统,可以实现对随机模式与目标模式的控制,以便直观的查看多目标随机行走的分布规律及行为模式。并从数学的角度做适当的探讨及给出相应的算法。2.系统设计2.1.功能模块 该程序主要是通过对随机行走的各种可能性进行探讨,确定了随机行走的随机数控制、随机方向控制和生成过程的随机行走模式组合。支持四方向和八方向的绝对方向模式和相对方向模式;提供无轨迹模式,拖尾型轨迹模式,单点轨迹模式的生成模式,且种子生成方式分为集中和分散两种。 图2.1 功能图可以通过运用重要指令对随机行走的随机数的设置,来选择相应的随机行走的方向和随机行走的模式及种子模式。其中随机行走的方向有四方向和八方向;随机行走的模式有绝对模式和相对模式,种子模式有分散模式和集中模式。2.2工作流程图 图2.2 工作流程图 图2.2为随机行走程序的工作流程图,该程序通过使用win 32窗口程序模式,给出随机数发生器的参数控制接口。通过对随机行走程序的随机参数的设置,选择相应的随机行走方向(如:四方形方向,八方形方向)和相应的随机行走模式(如:绝对模式和相对模式);之后形成随机行走的模式组合:四方形的绝对模式、八方形的绝对模式、四方形的相对模式、八方形的相对模式。3.系统实现;随机数发生器(产生0-3或0-7的随机数) mdproc moveax, ramovedx, tnimuleax, edx; eax = a*raddeax, rb; eax = a*r+bmovecx, rsmovtn, eax; rn = a*r+bshreax, cl; eax = (a*r+b)/(2s).if mf&2; 相对方向模式,从当前方向算起addeax, edx.endifandeax, ma; eax = (a*r+b)/(2s)%m为返回值retrndendp; 绘制直线drawlineprocuses ebx esi edi, _x:sword, _y:sword, _xx:sword, _yy:sword, _color:dwordlocal incx:sdword, incy:sdwordmoveax, bitmaptemp.bmheightmovzxecx, _ysubeax, ecxdeceaximuleax, bitmaptemp.bmwidthbytesmovzxedx, _xshledx, 2addeax, edxmovedi, mtempaddedi, eax; 计算两个方向的画线距离movzxeax, _xxmovzxedx, _xsubeax, edx; dx = xx - xmovzxedx, _ymovzxecx, _yysubedx, ecx; dy = yy - y; 单步(n个像素距离内的)随机行走stepprocuses ebx, hdct:hdc, _n:dwordlocal_k:dword.if view = 3movebx, offset atsmovedx, offset attmovecx, seed.while ecxmoveax, ebxmovedx, eaxaddebx, 8addedx, 4dececx.endw.endifmovecx, 0.while ecx _npushecxmovebx, offset atsmoveax, seedmov_k, eax.while _kcallrnd; rnd()为:产生0,1,2,3的随机数发生器andeax, 3.if eax = 0incebx.atomst.x; 向右行走一个像素的距离.elseif eax = 1decebx.atomst.y; 向上行走一个像素的距离.elseif eax = 2decebx.atomst.x; 向左行走一个像素的距离.elseif eax = 3incebx.atomst.y; 向下行走一个像素的距离.elseif eax = 4incebx.atomst.xdecebx.atomst.y.elseif eax = 5decebx.atomst.xdecebx.atomst.y.elseif eax = 6decebx.atomst.xincebx.atomst.y.elseincebx.atomst.xincebx.atomst.y.endif 4.系统测试 4.1测试的目的测试的目标是发现软件中的错误,但发现错误并不是最终目的,通过测试发现的错误之后必须诊断并改正错误,使系统的性能更好,满足用户的需求。4.2 测试方案 由于该系统是一个小系统,可以把整个系统作为一个单独的实体来测试,在此次测试中,软件测试过程基本上由系统测试来完成。 4.3测试结果4.3.1.拖尾型轨迹四方向绝对测试:图4.1 四方向绝对284.3.2.拖尾型轨迹四方向相对测试:图4.2四方向相对4.3.3.拖尾型轨迹八方向绝对测试:图4.3 八方向绝对4.3.4.拖尾型轨迹八方向向对测试:图4.4 八方向相对4.3.5.无轨迹绝对四方向测试:图4.5 无轨迹绝对四方向4.3.6.单点轨迹绝对四方向测试:图4.6 单点轨迹四方向4.4 可行性分析4.4.1.项目背景分析本项目名称为“多目标随机行走”。随机行走问题一直广受众多研究者的关注,并已广泛应用于物理学、化学、生物学、经济学等许多领域。4.4.2.技术条件可行性分析本系统是一个采用汇编语言,c语言的应用程序,现有的开发技术已经成熟。利用现有的技术可以达到功能目标。4.4.3.经济可行性分析该系统为小型系统,花费小,开发时间短,开发人数少,既经济又适用。4.4.4.操作方面的可行性本系统的研制和开发充分考虑用户工作流程、计算机操作水平等,尽可能提供更人性化、直观的界面,满足用户要求。系统的操作方式在用户组织内可行。4.4.5.可行性的结论经上述可行性分析,系统的研制和开发可以立即开始进行。总结 随机行走问题一直广受众多研究者的关注,并已广泛应用于物理学、化学、生物学、经济学等许多领域。由于实际的需要,各种受限的随机行走模型得到了深入研究,如对称随机行走、带有吸收壁的随机行走、带有反射壁的随机行走等。本设计是一个基于多目标的二维随机行走计算机模拟系统,可以实现对随机模式与目标模式的控制,以便直观的查看多目标随机行走的分布规律及行为模式。并从数学的角度做适当的探讨及给出相应的算法。通过该题目的设计过程,培养了我的结构化程序设计的思想,加深了汇编语言基本语言要素和流程结构的理解。可以初步应用软件系统的开发原理和开发方法,全面培养软件开发过程中的分析、设计、编码、测试及文档规范书写的能力,得到软件工程的训练,提高解决实际问题的能力。以及针对汇编语言中的重点和难点内容进行训练,独立完成具有一定工作量的程序设计任务,同时强调好的程序设计风格。在设计过程中虽然遇到了很多问题,但经过思考和检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过动手实践,使我们掌握的知识不再是纸上谈兵。在今后学习实践过程中,一定要不懈努力,不能遇到问题就退缩,只有这样,才能成功的做想做的事。我完成了这次课程设计,不过这只是我学习路上的驿站。我相信我在未来的学习中会记住从本次课程设计中所学到的东西,并将它用到未来的学习工作中去。参考文献1.张国春. 平面上的一种随机行走模型及其计算机模拟d. 河北大学硕士学位论文,2010.6,/view/7bc1c21fc281e53a5802ff96.html2.许延霆. 随机行走模型在交通中的应用d. 北京交通大学硕士学位论文,2009.12,/p-2068735087896.html3.李筠. 量子随机行走搜索算法研究d. 华东师范大学硕士学位论文,2006.5,/p-946596494389.html4.詹其秦. 醉汉随机行走问题的统计学模型d.上海交通大学,2013.6, /p-4903938187669.html5.焦潍苹, 李宏亮. 随机行走的扩散方程j. 浙江教育学院学报,2011.16.高显. brown运动与随机行走./view/a1b6e707e87101f69e3195f6.html7.毕秋香. 半直线上随机环境中的随机游动的若干性质 j. 应用概率统计, 1997, 13(2):120-124.8.盛骤, 谢式千, 潘承毅. 概率论与数理统计 m. 北京: 高等教育出版社, 2003. 源代码.code; 初始化种子initseedprocusesebx, _n:dwordlocalx0:sdword,y0:sdword, ttmovecx, seedmovebx, offset atsmoveax, tn.if !smode; 分散的种子。随机产生n个初始点和颜色.whileecxmulra; eax = a*raddeax, rb; eax = a*r+bcdqmovtn, eaxidivxclientmovebx.atomst.x, dxmoveax, tnmulraaddeax, rbcdqmovtn, eaxidivyclientmovebx.atomst.y, dxmoveax, tnmulraaddeax, rbmovtn, eaxmovedx, eaxshredx, 8andedx, 7f7f7fh; 限制随机颜色的亮度movebx.atomst.color, edxaddebx, sizeof atomstdececx.endw.else ; 集中的种子。使用当前窗口的中心点作为所有种子的初始位置movedx, xclientshredx, 1movx0, edxmovedx, yclientshredx, 1movy0, edx.whileecxmovedx, x0movebx.atomst.x, dxmovedx, y0movebx.atomst.y, dxmulraaddeax, rbmovtn, eaxmovedx, eaxshredx, 8andedx, 7f7f7fhmovebx.atomst.color, edxaddebx, sizeof atomstdececx.endw.endifretinitseedendp; 随机数发生器(产生0-3或0-7的随机数)rndprocmoveax, ramovedx, tnimuleax, edx; eax = a*raddeax, rb; eax = a*r+bmovecx, rsmovtn, eax; rn = a*r+bshreax, cl; eax = (a*r+b)/(2s).if mf&2; 相对方向模式,从当前方向算起addeax, edx.endifandeax, ma; eax = (a*r+b)/(2s)%m为返回值retrndendp; 绘制直线drawlineprocuses ebx esi edi, _x:sword, _y:sword, _xx:sword, _yy:sword, _color:dwordlocal incx:sdword, incy:sdwordmoveax, bitmaptemp.bmheightmovzxecx, _ysubeax, ecxdeceaximuleax, bitmaptemp.bmwidthbytesmovzxedx, _xshledx, 2addeax, edxmovedi, mtempaddedi, eax; 计算两个方向的画线距离movzxeax, _xxmovzxedx, _xsubeax, edx; dx = xx - xmovzxedx, _ymovzxecx, _yysubedx, ecx; dy = yy - y; 计算两个方向的步长movebx, 4.if (eax sdword ptr 0)negebxnegeax.elseif !eaxmovebx, eax.endifmovincx, ebxmovecx, bitmaptemp.bmwidthbytes.if (edx = edx)shledx, 1movesi, edxmovecx, eaxsubesi, eaxshleax, 1; 绘制整条直线.while ecxmovedi, ebxaddesi, edxaddedi, incx.if esi = sdword ptr 0addedi, bitmaptemp.bmwidthbytessubesi, eax.endifdececx.endw.elseshleax, 1movesi, eaxmovecx, edxsubesi, edxshledx, 1; 绘制整条直线.while ecxmovedi, ebxaddesi, eaxaddedi, incy.if esi = sdword ptr 0addedi, incxsubesi, edx.endifdececx.endw.endifretdrawlineendp; 单步(n个像素距离内的)随机行走stepprocuses ebx, hdct:hdc, _n:dwordlocal_k:dword.if view = 3movebx, offset atsmovedx, offset attmovecx, seed.while ecxmoveax, ebxmovedx, eaxaddebx, 8addedx, 4dececx.endw.endifmovecx, 0.while ecx _npushecxmovebx, offset atsmoveax, seedmov_k, eax.while _kcallrnd; rnd()为:产生0,1,2,3的随机数发生器andeax, 3.if eax = 0incebx.atomst.x; 向右行走一个像素的距离.elseif eax = 1decebx.atomst.y; 向上行走一个像素的距离.elseif eax = 2decebx.atomst.x; 向左行走一个像素的距离.elseif eax = 3incebx.atomst.y; 向下行走一个像素的距离.elseif eax = 4incebx.atomst.xdecebx.atomst.y.elseif eax = 5decebx.atomst.xdecebx.atomst.y.elseif eax = 6decebx.atomst.xincebx.atomst.y.elseincebx.atomst.xincebx.atomst.y.endif; 水平方向上的越界检查(越界时进行回绕处理)movsxeax, ebx.atomst.x.if eax = xclientmoveax, 0movebx.atomst.x, ax.endif; 垂直方向上的越界检查(也做回绕处理)movsxedx, ebx.atomst.y.if edx = yclientmovedx, 0movebx.atomst.y, dx.endif; 绘制当前状态(向hdc设备绘制一点)movzxeax, ebx.atomst.xmovzxedx, ebx.atomst.y.if view != 3invokesetpixel,hdct,eax,edx,ebx.atomst.color.endifaddebx, sizeof atomstdec_k.endwpopecxincecx.endw.if view = 3pushesipushedimovesi, offset atsmovedi, offset attmovebx, seed.while ebxinvoke drawline,edi.atomst.x,edi.atomst.y,esi.atomst.x,esi.atomst.y,esi.atomst.coloraddesi, 8addedi, 4decebx.endwpopedipopesi.endifretstependp 随机数发生器控制数值设置对话框过程randprocprochdlg:dword, umsg:dword, wparam:dword, lparam:dword.if umsg = wm_initdialoginvokesetips, hdlg, idc_edit01, rainvokesetips, hdlg, idc_edit03, rbinvokesetips, hdlg, idc_edit02, rninvokesetips, hdlg, idc_edit04, rsjmpitret0.elseif umsg = wm_command.if wparam = idokinvokegetips, hdlg, idc_edit01or eax, 1movra, eaxinvokegetips, hdlg, idc_edit03movrb, eaxinvokegetips, hdlg, idc_edit02movrn, eaxinvokegetips, hdlg, idc_edit04; 限制移位的范围.if eax 28moveax, 28.endifmovrs, eaxinvokeenddialog, hdlg, wparammoveax, truejmpitret.elseif wparam = idcancelinvokeenddialog, hdlg, wparammoveax, truejmpitret.endif.endifitret0:xoreax, eaxitret:retrandprocendp; 窗口过程_procwinmainprocuses ebx edi esi,hwnd,umsg,wparam,lparamlocalstps:paintstructlocalhdc:hdc, _speed:dword.ifumsg = wm_paint; paint消息完成客户区的更新或失效区域的绘制invokebeginpaint,hwnd,addr stpsmovhdc,eax; 在此添加绘制代码invoke stretchblt, hdc, 0, 0, xclient, yclient, hdctemp, 0, 0, xclient, yclient, srccopyinvokeendpaint,hwnd,addr stps.elseifumsg = wm_sizeinvokedeletedc, hdctempinvokedeleteobject, hbitmaptemp; 当窗口尺寸变化时,计算客户区尺寸和中心坐标moveax, lparammovedx, lparamandeax, 0ffffhshredx, 16.if eax 16moveax, 16.endifmovxclient, eax; 客户区窗口宽度.if edx 16movedx, 16.endifmovyclient, edx; 客户区窗口高度; 恢复随机数种子moveax, rnmovtn, eaxinvokeinitseed, seed; 重新初始化种子moveax, xclientmovbminfo.biwidth, eaxmoveax, yclientmovbminfo.biheight, eaxinvoke createcompatibledc, 0; 创建后备缓冲区设备描述表(hdc)movhdctemp, eaxinvoke createdibsection, hdctemp, addr bminfo, dib_rgb_colors, addr mtemp, 0, 0movhbitmaptemp, eaxinvoke selectobject, hdctemp, eaxinvoke getobject, hbitmaptemp, sizeof bitmap, addr bitmaptempinvokebksetcolor, mtemp, bkcolor; 重画内存设备绘图区背景.elseifumsg = wm_timer; 获取设备描述表invokegetdc,hwndmovhdc,eax; 绘制当前状态(向hdc设备绘制一点).if view = 0invokebksetcolor, mtemp, bkcolor.elseif view = 1invokebkgrey, mtemp, bkcolor.endifinvoke step,hdctemp,astepinvoke stretchblt, hdc, 0, 0, xclient, yclient, hdctemp, 0, 0, xclient, yclient, srccopy; 删除设备描述表invokereleasedc,hwnd,hdc.elseifumsg = wm_commandmovzxeax, word ptr wparam.if eax = idm_restart; 重新开始moveax, rnmovtn, eaxinvokeinitseed, seedinvokebksetcolor, mtemp, bkcolor.if !ftimemovftime, 100invoke settimer,hwnd,ftime,speed,null.endif.elseif eax = idm_delay; 暂停 / 继续.if ftimeinvokekilltimer,hwnd,ftimemovftime, 0.elsemovftime, 100invokesettimer,hwnd,ftime,speed,null.endif.elseif eax = idm_saveimg; 保存图像invokesavebmdlg, offset pathname, offset filename.if eaxinvokewritedib, offset pathname.endif.elseif eax = idm_exit; 退出invokedestroywindow, hwnd.elseif eax = idm_sysparam; 系统参数设置moveax, speedmov_speed, eaxinvokedialogboxparam, hinstance, idd_sysparam, hwnd, addr syspproc, 0.if eax = idok.if seedxchmoveax, rnmovtn, eaxinvokeinitseed, seedinvokebksetcolor, mtemp, bkcolor.endifmoveax, speed.if eax != _speed; 生成速度改变时重新设置定时器.if ftimeinvoke killtimer,hwnd,ftimeinvoke settimer,hwnd,ftime,speed,null.endif.endifinvokeinvalidaterect, hwnd, null, true.endif.elseif eax = idm_rndparam; 随机数发生器参数设置invokedialogboxparam, hinstance, idd_rndparam, hwnd, addr randproc, 0.if eax = idokmoveax, rnmovtn, eaxinvokeinvalidaterect, hwnd, null, true.endif.elseif eax = idm_bkcolor; 选取背景颜色invokeselectcolor, offset bkcolor.if eaxinvokeinvalidaterect, hwnd, null, true.endif.elseif eax = idm_about; 关于invokedialogboxparam, hinstance, idd_aboutbox, hwnd, addr about, 0.elseinvokedefwindowproc, hwnd, umsg, wparam, lparamret.endif.elseifumsg = wm_createinvoke fileinitialize, hwndinvoke createcompatibledc, 0; 创建后备缓冲区设备描述表(hdc)movhdctemp, eaxinvoke createdibsection, hdctemp, addr bminfo, dib_rgb_colors, addr mtemp, 0, 0movhbitmaptemp, eaxinvoke selectobject, hdctemp, eaxinvoke getobject, hbitmaptemp, sizeof bitmap, addr bitmaptempinvoke bksetcolor, mtemp, bkcolor; 创建窗口时设定一个定时器.if !ftimemovftime, 100invoke settimer,hwnd,ftime,speed,null.endif.elseifumsg = wm_destroyinvoke deletedc, hdctempinvoke deleteobject, hbitmaptemp; 窗口关闭时删除定时器.if ftimeinvoke killtimer,hwnd,ftimemovftime,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论