网络虚拟环境中两运动物体安全避障互寻相遇的一种算法及实现
2023-12-03
来源:好走旅游网
2014年第02期 ●doi:10 3969/j issn.1671-1122 2014 02 007 网络虚拟环境中两运动物体安全避障 互寻相遇的一种算法及实现 唐文政,白成杰 (山东师范大学物理与电子科学学院,山东济南250014) 摘要:文章提出了一种在网络虚拟环境中两运动物体安全避障互寻相遇的方法。已知两个运动物 体的初始位置,通过碰撞检测算法、相互寻找算法以及相遇判定算法,判断两物体是否相遇,模拟两物 体移动的路线,准确定位两物体的相遇地点并记录互寻路线图。该算法能够准确定位两运动物体相遇的 位置,确定安全避障后相遇的路线。 关键词:碰撞检测;相互寻找算法;相遇判定算法;安全避障 中图分类号:TP309 文献标识码:A 文章编号:1671—1122(2014)02—0037—04 An Algorithm and Implementation of Two Moving Obj ects Find and Meet Each Other and Avoid Obstacle Safely in Network Virtual Environment TANG Wlen—zheng.BAI Cheng-jie (PhysicalandElectronicScienceCollege ofShandongNormalUniversity,JinanShandong250014,China) Abstract:The article puts forward a method to ifnd a path between wot moving objects which ca//find and meet each other and avoid obstacles safely in network virtual environment.Having known the initial positions of he ttwo moving objects,with the collision detection algorithm,the ifnd—each-other algorithm nd ahet meet—decision algorithm, hte system can judge whether the two objects meet each other,and locate accurately hte meeting place and record hte route map by simulating hte walking routes of the two objects.The algorithm Can locate accurately hte meeting position and look for the route effectively in network virtual environment. Key words:collision detection;find—each—other algorithm;meet-decision algoritm;avoihd obstacle safely 0引言 网络虚拟环境是指采用以网络技术为核心的虚拟现实技术,所生成的逼真的视、听、触觉一体化的特定范围的环境。 用户可以通过一些专用工具,如头盔、数据手套等,以自然方式与虚拟环境中的对象进行交互,从而产生如同真实环境的 感受和体验。近年来,网络虚拟环境—直是信息领域科技工作者和产业界人士研究、开发和应用的热点,而安全问题又是 网络虚拟环境领域的经典问题 。 网络虚拟环境中往往存在多种物体,有静止物体,也有运动物体。如何使运动物体避开静止物体及其他障碍物体,使 其在网络虚拟环境中安全移动,是构建良好网络虚拟环境应解决的技术问题,因此相关研究具有—定的理论意义与应用 价值。 1算法流程 在网络虚拟环境中,为了确定两运动物体安全避障互寻相遇路径,需要解决两个问题:一是判断两物体是否相遇;二 是记录互寻路线图。为了解决这两个问题,在研究互寻路径算法时,制定了两个规则:相遇判定规则和互寻规则。通过分析, ● 收稿日期:2013—10—10 基金项目:国家自然科学基金[61340019】、山东省自然科学基金【ZK2012FM029】 作者简介:唐文政(1988一),男,山东,硕士研究生,主要研究方向:数字图像处理、计算机图形学;白成杰(1966一),男,山东,教授,硕士 主要研究方向:数字图像处理、计算机图形学。 37 I 2014年第O2期 算法流程如图1所示。 位鬻初始化、 _f 广— 广——一、 ≤j- 碰撞硷测 湮锶硼 J IN 躲避障碍卜 相夏寻找 位置 J ≮ 相遇判定 Y 输出 图1互寻最短路径算法流程 首先对两物体的位置进行初始化赋值,然后执行碰撞 检测,判断两物体是否碰撞障碍物。如果没有碰撞障碍物, 则进行相互寻找;如果碰撞障碍物,则躲避障碍物后再执 行相互寻找。执行相互寻找后,通过相遇判定准则判断两 个物体是否相遇。如果相遇,则输出相遇前的坐标集(即 互寻路线图)以及相遇时的坐标(即汇合位置);否则记录 当前位置信息并重新定义位置,然后再执行碰撞检测。 2碰撞检测算法 碰撞检测的目的是判断两个运动物体是否与障碍物 发生碰撞,从而保证运动物体的安全性。为了检测是否 发生碰撞,通常将两个物体比作两个矩形区域,然后判 断两个矩形是否重叠,重叠即判为相遇 。这种算法比 较简单,也比较容易实现。但在实际问题中,物体往往 是不规则的,面对不规则物体,采用单纯矩形区域的效 果往往比较差。 根据文献分析,可将不规则物体间的碰撞看作是不 规则多边形的碰撞,而多边形可以用一系列点或三角形 表示 。如果障碍物用多边形的顶点表示,且两个运动 物体用一系列三角形表示,则碰撞检测可简化为点在三 角形内外的问题。 2.1算法描述 同一平面内的点P和AABC只有两种位置关系,即点 在三角形外或点在三角形内(包括边界)。而判定点P在 AABC内需同时满足3个条件,即点P和点c在直线AB 的同侧、点P和点B在直线AC的同侧、点P和点A在直 线BC的同侧 。点与三角形的位置关系如图2所示。 C (a) (b) 图2点与三角形的位置关系 两点在直线同侧的判定可描述为:将两点分别代人该 直线的一般方程,若得到的两个值同号,则两点在该直线 的同侧。 如果点P的坐标为P(x P,Y ),点c的坐标为C(xDyc), 直线的一般方程为ax+ +c=0,那么当 ( + +c) (幔+ +c)/>0……………………………………(1) 成立,可以判定点P和点c在直线AB的同侧。同样,根 据公式(1),可以判定点P和点B是否在直线AC同侧, 点P和点A是否在直线BC的同侧。若同时满足以上3个 条件,则可判定点P在AABC的内部,否则点P在AABC 的外部。 2.2算法实现 编写函数IslnTrianglef)用于判定点与三角形的位置关 系,该函数有两个人15参数:in—tri和ITI—pt。其中,m—pt 是需要判定的点,是一个CPoint类的变量;m—tri是一个 Triangle类的变量,包含三角形信息,且Triangle是自定义 的类,其原型如下: typedef struet triangle//定义j角形结构体 f CPoint A: CPoint B: CPoint C: }Triangle; IsInTrianglef)原型如下: bool CMyObjeetDlg::IsInTriangle(Triangle In——tri,CPoint in——pt) f ,/求出三条边一般方程的参数 double Al=mtri.B.y-m—tri.A.y; double Bl=mri.A.x—mtri.B.x; tdouble CI--nltri.B.X intri.A.Y—In—tri.A.X Intri.B.y; double A2=mtri.C.Y一111tri.B.y; —double B2=m—tri.B.X—In—tri.C.x; double C2=mtri.C.X ITItri.B.Y一1"I1tri.B.x intri.C.y; ~double A3=m—tri.A.Y—intri.C.y; double B3=mtri.C.X—Ill—tri A.x; double C3=mtri.A.x mtri.C.y-mtri.C.X mtri.A.y; ~—//判定点与三角形的位置关系 if((Al*m—tri.C.x+B1 Ill—tri.C.y+C1)*(A1 Ill—pt.x+Bl nl— pt.y+ 1)>=u&& (A2 m—tri.A.x+B2 In—tri.A.y+C2) (A2 m—pt.x+B2 113一 pt.y+C2)>=0&& (A3 m—tri.B.x+B3 m—tri.B.y+C3) (A3 II1一pt.x+B3 m— pt.y+C3)>=0) return true;//在三角形内,返回真 else return false;//不在三角形内,返回假 1 IsInTriangle()返回布尔值。若返回值为真,则点在三 角形内;若返回值为假,则点不在三角形内。 以物体M、N为例,执行上述算法实现碰撞检测。 本仿真程序中用一个五边形作为物体M,如图3(a)所示; 用不规则图形代表障碍物,如图3(c)所示。障碍物可用 一系列的点表示,如图3(d)所示,封装到Point类中;物 体M可用一系列三角形表示,如图3(b)所示,封装到 Triangle类中。物体碰撞检测简化为判断点在三角形内外 的问题。 1 E 黔 B 图3碰撞检测模型 设物体M的坐标为M(x ,Y ),若物体M的 IslnTriangle()返回值为真,则发生碰撞,重置M的坐标为 M=M(x +1 +1);若返回值为假,未发生碰撞,则执行相互 寻找。 另一物体N的碰撞检测方法与M相同。 3相互寻找算法 互寻规则的目的是制定互寻路线图。根据两点之间直 线最短原则,互寻规则实际上可归结为画直线问题,即给 定M、N两个物体的位置坐标,画它们之间的直线。利用 画直线的方法来统计互寻路径的坐标点,坐标点的集合即 为路线图。 绘制直线的算法比较成熟,如DDA算法、Bresenham 算法等 。本文采用优化DDA算法记录两物体相遇路线 2014年第02期 上的坐标点,作为互寻移动的路线。 3.1算法描述 DDA算 digital differential analyzer)又称数值微分法, 是计算机图形学中一种利用基于直线的微分方程来生成直 线的方法。该算法描述如下。 给定M、N的坐标为M(x ,Y )和N(x:,Y ),作为直线的 起点和终点坐标。该直线的斜率为: = 2-y1)/ 2 1)…………………………………………(2) 递推关系为: ………………………………………………(3) ………………………………………………(4) Xi+l +1 ………………………………………………(5) YⅢ=yf+l…………………………………………………(6) h 利用上述算法求得的 和Y 可能是浮点数,需要进行 四舍五人,从而保证直线的点是整数像素点吲。对DDA算 法进行优化,如果Ikl<l,则 =int 0, ’=int(y +0.5);否则 X’=int(xf+0.5),Y’=int(yi)。 两个运动物体互寻应是从两头向中间画线 ,即先求 最外面两个点的坐标,再逐渐向内求值,最终到达汇合点 坐标。 以运动物体M寻找另一运动物体N为例。设当前M、 N的位置坐标分别为M(x ,)和N(x2,y:),根据DDA算法的 思想,M、N互寻规则算法如下: 1)求得x,Y方向的距离,记作detax和detay: detax=xl-x2………………………………………………(7) detay=y ̄-Y2………………………………………………(8) 2)判断位移的正负以确定移动的方向。设stepx、stepy 为两个方向上的移动步长: f.-1 detax‘0 stepx={0 detax=0……………………………………(9) I 1 detax>0 stepy的计算方法同stepx。 3)判断物体M、N在两个方向上的坐标差是否均大于2。 如果均大于2,则根据@tax、detay绝对值大小比较的结果, 确定是对stepx还是对stepy进行加权,加权参数为2。这 样二者的移动更趋于直线: 若 2014年第O2期 fstepx*=2 abs(detax)>abs(detay)…………………・………・…・(1O) 1 tepy 2 abs(detax)<abs(detay) 否则认为物体M和N在同一水平位置或者垂直位置,无需 加权。 4)更新M的位置, ̄[Jx,+=stepx, + z 。 N寻找M同时进行,方法同M寻找N。 3-2算法实现 编写函数MOVE(MN ml1)模拟M,N相遇过程,其部 分代码如下: ,/函数返回下一个时刻相对当前时刻的位移 POINT CMNDlg::MOVE(MN mn) { POlNT deta; POINT step; deta.x=mn.Illdestination.X—mY1.nllocation.x; deta.y=mn.m—destination.y-mn.111location.v; if(abs(deta.y]==O) step.y=O; else if(deta.y>0) step.y:1; else step.y=一1; if(abs(deta.x1==01 step.x=0: else if(deta.x>01 step.x=l: else step.x=一l: if((abs(deta.x)>2)&&abs(deta.y)>2) if Obs(deta.x)>abs(deta.v)) step.x =2: else step.Y =2: return step; } 互寻规则通过返回位移信息,一方面得到两个物体的 互寻路线图,另—方面为相遇判定算法提供位置信息。 4相遇判定算法 相遇判定是判断两个物体是否相遇,其中引入欧式距 离…”。通过判断两个物体之间距离是否小于一个固定阈 值,从而判断是否相遇[121 ̄其算法描述如下: 1)设置阈值d,d=r +r 。其中,r ,r 是物体M,N 的最大半径。 2)M点坐标为M ,Y ),N点坐标为N(x:,Y:),计算两 个物体之间距离do: =√( ) +( ) …………………………………(1 1) 3)如果 > ,则两个物体未相遇,执行相互寻找算法; I 4。 否则两个物体相遇,记录坐标,作为汇合地点。 5结束语 随着虚拟现实技术的飞速发展,网络虚拟环境更加逼 真,更趋近于现实世界。在智能机器人移动、智能搜救、 大型游戏等领域,绘制网络虚拟环境都是必不可少的环节。 例如,智能机器人可以在一个规划好的虚拟环境中移动, 有效避开障碍,到达指定地点。当前网络虚拟环境虽然提 供了强大的应用,但很多时候还是需要人们自己去定义路 线,尤其在两物体互寻功能上存在欠缺。本仿真程序使用 c++语言在Visual C++6.0环境下编写。微软公司的Visual c++6.0软件提供了强大的函数基础类库,即MFC函数库。 除了可以借助MFC函数库轻松编程外,函数库中还提供了 封装好的接口程序,增加了程序的可移植性。本文借助以 上工具实现碰撞检测仿真、相遇判定仿真、互寻移动仿真。 从实验结果看,算法可以较好地实现两个运动物体的互寻 操作,安全躲避障碍物并记录互寻路线和汇合地点。不足 之处在于算法处于网络虚拟环境仿真阶段,将来还要将算 法实际应用到网络虚拟现实环境中,并逐步推广到三维或 者更复杂的网络虚拟环境中。 (责编马珂) 参考文献 [1 J熊玉梅虚拟环境中物体碰撞检测技术的研究[D】.上海:上海 大学,2{)11 f2]王神.虚拟现实中碰撞检测关键技术研究IL)1吉林:吉林大学, 2009. 【3]王志芳碰撞检测技术的研究及应用【I)i 太原:太原科技大学, 2012. 【4]赵伟,谭睿璞,李勇 复杂虚拟环境下的实时碰撞检测算法U]. 系统仿真学报,2010,22(o1):125—129 【51赵伟,何艳炙.一种快速的基于并行的碰撞检测算法叭 吉林大 学学报(工学版),2008,(【)1):152—157. [6】张干宗.线性规划【M].武汉:武汉大学出版社,2004. [7]孙家广,杨长贵.计算机图形学【M】北京:清华大学出版社, 2000. [81王晓云 多段DDA直线扫描转换算法叭.微计算机信息,2(105, 21f08):97~98 【9]王茂华 改进的直线DDA算法卟科技资讯,2009,(04): 241-243 【1f】】郑崇友,王汇淳,王智秋 几何学引论【M J.北京:高等教育出 版社.2000, 【11]李志刚,牛强.一种改进的符号化时间序列聚类方法U】.微电 子学与计算机,2012,(11):74—77. 『121任靖,李春平.最小距离分类器的改进算法——加权最小距离分 类器U].计算机应用,2005,25(05):992—994