基于空间扫描策略的三维相交检测算法的制作方法

文档序号:6584303阅读:407来源:国知局
专利名称:基于空间扫描策略的三维相交检测算法的制作方法
技术领域
本发明涉及计算机图形学、计算几何、CAD/CAM、GIS、VLSI布局、线性规划、模式识 别领域,具体涉及基于红蓝思想的空间对象分组、事件点的创建、事件点列表的构建、空间 扫描面的建立与移动、激活态空间对象的相交测试等内容。
背景技术
近年来,国内外学者对如何提高相交检测效率进行了大量的研究,提出了 诸如空 间划分法和层次包围盒法等有效的检测方法。在实际应用中,Ganter和Isarankura提出 了一种空间分解的方法,将包含几何对象的空间划分成一系列子空间,只在两个几何对象 的重叠子空间进行相交检测,这样减少了几何对象两两相交计算的数目,进一步减少了测 试的时间。Gottschalk提出了基于OBB的相交检测算法,基于此开发了当时最快的相交检 测系统一RAPID。平面扫描(Swe印Line)技术是计算几何领域一个通用的技术,Bentley和 Ottmarm将平面扫描技术引入到平面线段交点算法中,提出了 BO算法,该算法把效率和实 际线段相交个数联系起来,极大的提高了平面线段交点算法的效率,属于“输出敏感型”算 法。Domiter and Zalik对二维散乱点集进行带边界约束的Delaunay三角剖分时,应用平 面扫描技术将研究区域划分成已经三角剖分的区域与未进行三角剖分的区域,大大提高了 Delaunay三角剖分算法的效率。Krista等将平面扫描技术应用于空间数据的空间聚类分 析中,提出了一种可以处理大数据量空间数据库的空间聚类方法。

发明内容
为了克服现有的相交检测算法在处理海量三维GIS空间数据时效率低下的缺点, 借鉴二维平面扫描技术,提出了一种空间扫描策略,进而提出了一种基于空间扫描策略的 三维相交检测算法-Swe印Plane,该算法在大大提高了算法效率同时,也解决了大数据量复 杂场景内相交检测的实时性问题。本发明的技术方案是基于空间扫描策略的三维相交检测算法,根据空间扫描的 分区特性,在扫描的过程中,将场景内空间对象的状态划分为死亡态,激活态和休眠态,通 过只对处于激活态的空间对象进行相交计算。该算法充分利用了检测过程中位于虚拟扫描 轨迹前后分区内空间对象之间的联系,对检测过程进行了优化,减少了场景内各个空间对 象间大量不必要的相交检测,在大大提高了算法效率同时,也解决了大数据量复杂场景内 相交检测的实时性问题。上述技术方案进一步包括以下四个部分步骤1 读入空间对象实体模型数据和基于红蓝思想对空间对象分组;步骤2 创建事件点并构建和事件点列表;步骤3 确定自适应三维空间扫描面;步骤4 空间扫描面的移动与事件点触发的动作。
所述步骤1中,在计算机内存中建立空间实体对象的数据模型的方式是通过用 计算机编程语言实现的内存数据结构,组织和管理空间实体对象,描述实体对象的几何关 系和拓扑邻接信息。在此基础上,按照用户预定义分类标准,作为红蓝分组的标准,分别构 建红蓝要素分组列表。所述步骤2具体包括在读取每个空间对象到内存的同时,创建与之相对应的事 件点,并将其X最大值xMAX、Y最大值yMAX、Z最大值zMAX,作为事件点的值,分别放入顺 序表xTable、yTable、zTable中。当所有对象都读取完毕后,选择顺序表xTable、yTable、 zTable中记录最多的作为事件点列表(EventTable),并对事件点列表中记录按照从大到 小顺序进行排列。所述步骤3具体包括根据空间对象的空间分布特征,并结合步骤2中事件点列表 选取方法,自适应地完成空间扫描面的构建。所述步骤4具体包括在空间扫描面按照事件点列表中事件点的顺序,从表头逐 步向表尾移动的过程中,在事件点位置触发相应的动作,即更新空间对象的状态,实时更新 激活态空间对象集合以及对处于激活态的空间对象间的进行相交计算。本发明旨在解决大规模数据量的虚拟场景环境中空间对象间实时相交检测的问 题,以往的检测算法多是针对两个几何对象发生碰撞的情况,当场景中存在大量几何对象 时,需要反复调用以上算法进行几何对象间的两两相交检测,会浪费大量检测的时间。这种 做法没有综合利用检测过程中几何对象相互之间的联系,以减少不必要的检测。


图1是本发明实施例1的流程2是本发明实施例1空间扫描策略的示意3是本发明实施例1空间对象类结构4是本发明实施例1红蓝对象分组列表类结构图
具体实施例方式下面结合附图和实施例作进一步详细说明。实施例1如图1所示,基于空间扫描策略的三维相交检测算法,该方法包括以下四个部分步骤1读入空间对象实体模型数据和基于红蓝思想的空间对象分组;步骤2创建事件点并构建和事件点列表;步骤3确定自适应三维空间扫描面;步骤4空间扫描面的移动与事件点触发的动作。具体实施步骤如下步骤1读入空间对象数据和基于红蓝思想的空间对象分组;空间实体对象在计算机内存中的数据组织方式是通过用计算机编程语言实现的 内存数据结构,组织和管理空间实体对象,描述实体对象的几何关系和拓扑邻接信息。在Windows XP SP3 系统下,利用 Visual Studio 2008SP1 平台建立 C++i吾言 的Win32动态链接库,命名为Swe印Plane。本实施例Swe印Plane中采用的数据结构包括CFeature、CFeatureTable、CActiveFeatureSet 三部分,详细定义如下 CFeature类的结构如附图3所示,详细结构包括要素的ID号、要素顶点列表和
要素的包围盒,以及要素的属性特征值,代码如下
class CFeature{public://具有的操作CFeature(int id, List<CVertex>vertexList, Feature_Type featureType);
II实例对象丨丨判断是否与另外的空间对象相交bool intersect (CFeature*other);public://具有的属性int ID ;// 要素的 id 号Feature_Type featureType ;// 要素的属性特征值List<CVertex>vertexList ;// ^"MM^M^CBoundingBox bBox ;//要素空间对象包围盒};注意上述伪代码中CVertex为顶点类,其包括了顶点的ID,以及顶点的X、Y和Z
坐标值。算法首先从外存中读取一系列空间对象到内存中,并按照上述数据结构进行组织 和管理。然后,按照用户预定义的要素的属性特征值(或空间对象本身具有的分类特性), 作为红蓝分组的标准,分别构建红蓝要素分组列表(FeatureTable)。红蓝对象分组列表类的组织结构如附图4所示,详细代码如下class CFeatureTable{public://具有的操作II向要素表中添加一个要素void addFeature (CFeature氺feature);II从要素表中需找事件点为指定event值的所有要素CFeature氺getFeatures(CEvent event);丨丨确定Feature的索引取值void setupFeatureTable(ScanPlaneDirection spDirection);private://具有的属性//事件点到空间对象的映射表mu 11imap<CEvent, CFeature*>eventsMap2Features ;//空间扫描面的方向ScanPlaneDirection_spDirection ;};步骤2创建事件点并构建和事件点列表;所谓事件点是指,在扫描的过程中空间扫描面(一个假想的平面)会在某些特殊的点停住,进行一些分析操作,这些点被称为事件点。事件点可以是任何分析算法感兴趣的 空间要素,包括对象之间的交点和特征点等。事件点依照算法确定的空间排序关系进行存 储,从而构成的事件点集合,记为事件点列表。事先能够确定的事件点列表在扫描过程中不 在变化,称为静态事件点列表;需要在扫描过程中计算更性的事件点列表称为动态事件点 列表。在读取每个空间对象到内存的同时,创建与之相对应的事件点,并将其X最大值 xMAX、Y最大值yMAX、Z最大值zMAX,作为事件点的值,分别放入顺序表xTable、yTable、 zTable中。利用C++标准模板库STL中的集合模板类(set),将三个顺序表定义为set集 合,在完成事件点存储和管理同时,可以避免事件点的重复存储。当所有对象都读取完毕 后,选择顺序表xTab 1 e、yTab 1 e、zTab 1 e中记录最多的作为事件点列表(EventTab 1 e),并对 事件点列表中记录按照坐标值从大到小顺序进行排列。步骤3确定自适应三维空间扫描面;所采用的空间扫描策略是假设空间中有一个空间对象的集合S,并假想有一个 垂直于坐标轴(X轴、Y轴或Z轴)的扫描面(Swe印Plane,以下简称SP)从S的左端向右 端扫描。在SP扫描的过程中,动态维护S n SP的空间对象集合,同时要满足两个不变式 a)位于SP左端的空间对象已经参与了分析操作,将不再参与以后的分析操作;b)位于SP 右端或与SP相交的空间对象是我们要进行分析操作的对象,需要对这些空间对象的集合 进行实时的更新。与二维平面扫描技术相似,在SP扫描过程中,根据每个空间对象与扫描面SP的关 系,可以将空间对象集合S分为以下三种状态的空间对象(如图2所示)a)死亡态(Dead State)空间对象,位于扫描面SP左侧的空间对象,它们是已经进 行过相交测试的空间对象,将不再参与求交计算;b)激活态(Active State)空间对象,与扫描面SP相交的空间对象,它们是正在进 行相交测试的空间对象;c)休眠态(Slewing State)空间对象,位于扫描面SP右侧的空间对象,它们是暂 时不参与相交测试的空间对象,只有当扫描面到达它们所处的事件点时,才触发相应的求 交计算。基于空间扫描策略的三维相交检测算法核心在于通过空间扫描面将空间对象分 为死亡、活动、休眠三个状态,仅对处于活动状态的对象进行实际相交计算,从而减少相交 计算的数量,加快检测的速度。因此,有效的对空间对象进行划分,减少处于激活态的空间 对象个数,是算法效率提高的关键。本文所提出的算法,根据X、Y、Z方向空间对象分布的特征,选择空间对象分布最 长的轴向为空间扫描面的移动方向。结合步骤2中事件点列表选取方法的内容,如果以X轴 向作为事件点列表,则空间扫描面平行于YZ平面;如果以Y轴向作为事件点表,则空间扫描 面平行于XZ平面,如果以Z轴向作为事件表,则扫描面平行于XY平面。如此即根据空间对 象的空间分布特征,自适应的确定了空间扫描面的构建。这种自适应的决定空间扫描面的 构建,使得对空间对象的状态划分更加合理,能够有效的减少同时处于激活态的对象个数, 进而减少了实际相交计算次数,有效的提高算法效率。步骤4空间扫描面的移动与事件点触发的动作。
算法在事件点位置对空间对象进行的所有分析和操作,称为事件点触发的动作, 在相交检测的算法中,主要是空间对象间的相交测试。空间扫描面按照事件点列表中事件点的顺序,从表头逐步向表尾移动,并在事件 点位置触发相应的动作。在本文的算法中,事件点触发的动作包括更新空间对象的状态、实 时更新激活态空间对象集合以及对处于激活态的空间对象间的进行相交计算。以Z轴向事件列表和平行于XY平面的空间扫描面为例进行阐述,当空间扫描 面从前一个事件点(PreviousEvent)移动到当前事件点(CurrentEvent)时,分别从红 蓝对象列表(RedFeatureTable 和 BlueFeatureTable)中查找 CurrentEvent 事件点所 对应的空间对象,即所有ZMax等于CurrentEvent值的空间对象;从激活态对象集合 (ActiveFeatureSet)中查找与CurrentEvent事件点满足某种逻辑关系的空间对象,即所 有ZMin大于CurrentEvent值的空间对象。将CurrentEvent所对应的空间对象的状态从 休眠态改为激活态,并将其添加到激活态对象集合中;将与CurrentEvent满足逻辑关系的 空间对象的状态从激活态改为死亡态,并将其从激活态空间对象集合中删除。在每次往激活态空间对象集合中添加空间对象时,将其与集合内其他空间对象进 行相交计算操作。为了加快计算的速度,先利用包围盒技术,判断参与相交计算的空间对象 的包围盒之间的空间关系,如果两个包围盒不相交,那么这两个空间对象也不会相交,这样 可以进一步减少不必要的相交计算操作。如果两个空间对象相交,则将其添加到计算结果 集中。算法实现中空间扫描面从事件点列表头逐步移动到表尾部,代码如下foreach (CEvent CurrentEvent in eventSet) {II更新激活态对象集合中对象状态activeFeatures- > moveToNextPosition(currentEvent);//从红对象分组列表中获取currentEvent事件点对应的空间对象集合CFeatureSet 氺 redFeatures = redFeatureTable- > getFeatures(currentEvent);foreach(CFeature redFeature in redFeatures){activeFeatures- > addFeature (redFeature, RED_FEATURE);}II对蓝对象分组列表做的操作,与红对象分组列表相似..........}注上面的代码中,activeFeatures是激活态空间对象集合类 CActiveFeatureSet 的一个实例。
权利要求
基于空间扫描策略的三维相交检测算法,其特征是,基于空间扫描策略的三维相交检测算法,根据空间扫描的分区特性,在扫描的过程中,将场景内空间对象的状态划分为死亡态,激活态和休眠态,通过只对处于激活态的空间对象进行相交计算。
2.根据权利要求1所述的检测算法,其特征是,该方法包括以下四个部分步骤1读入空间对象实体模型数据和基于红蓝思想的空间对象分组;步骤2创建事件点并构建和事件点列表;所述事件点是指,在扫描的过程中空间扫描 面会在某些特殊的点停住,进行一些分析操作,这些点被称为事件点;事件点依照算法确定 的空间排序关系进行存储,从而构成的事件点集合,记为事件点列表;步骤3确定自适应三维空间扫描面;步骤4空间扫描面的移动与事件点触发的动作。
3.根据权利要求2所述的相交检测算法,其特征是,所述步骤1中,在计算机内存中建立空间实体对象的数据模型的方式是通过用计算 机编程语言实现的内存数据结构,组织和管理空间实体对象,描述实体对象的几何关系和 拓扑邻接信息;在此基础上,按照用户预定义分类标准,作为红蓝分组的标准,分别构建红 蓝要素分组列表;所述步骤2具体包括在读取每个空间对象到内存的同时,创建与之相对应的事件点, 并将其X最大值(xMAX)、Y最大值(yMAX)、Z最大值(zMAX),作为事件点的值,分别放入顺序 表(XTable、yTable、ZTable)中;当所有对象都读取完毕后,选择顺序表(xTable、yTable、 zTable)中记录最多的作为事件点列表(EventTable),并对事件点列表中记录按照从大到 小顺序进行排列;所述步骤3具体包括实时更新激活态空间对象集合以及对处于激活态的空间对象间 的进行相交计算。
4.根据权利要求2所述的相交检测算法,其特征是所述步骤3中采用的空间扫描策 略是假设空间中有一个空间对象的集合S,并假想有一个垂直于坐标轴的扫描面从S的左 端向右端扫描;在SP扫描的过程中,动态维护S n SP的空间对象集合,同时要满足两个不 变式a)位于SP左端的空间对象已经参与了分析操作,将不再参与以后的分析操作;b)位 于SP右端或与SP相交的空间对象是要进行分析操作的对象,需要对这些空间对象的集合 进行实时的更新。
5.根据权利要求2所述的相交检测算法,其特征是所述步骤3中,空间扫描面的构建 过程是结合步骤2中事件点列表选取方法的内容,如果以X轴向作为事件点列表,则空间 扫描面平行于YZ平面;如果以Y轴向作为事件点表,则空间扫描面平行于XZ平面,如果以 Z轴向作为事件表,则扫描面平行于XY平面。
6.根据权利要求2所述的相交检测算法,其特征是所述步骤4中,所述的空间扫 描面移动和事件点触发动作的实现过程以Z轴向事件列表和平行于XY平面的空间扫 描面为例进行阐述,当空间扫描面从前一个事件点(PreviousEvent)移动到当前事件点 (CurrentEvent)时,分别从红蓝对象列表(RedFeatureTable 禾口 BlueFeatureTable)中查找 当前事件点(CurrentEvent)所对应的空间对象;从激活态对象集合(ActiveFeatureSet) 中查找与当前事件点(CurrentEvent)满足某种逻辑关系的空间对象;将当前事件点 (CurrentEvent)所对应的空间对象的状态从休眠态改为激活态,并将其添加到激活态对象集合中;将与当前事件点(CurrentEvent)满足逻辑关系的空间对象的状态从激活态改为 死亡态,并将其从激活态空间对象集合中删除。
全文摘要
本发明公开了一种基于空间扫描策略的三维相交检测算法,该方法是根据空间扫描的分区特性,在虚拟扫描面的移动过程中,将场景内空间对象的状态划分为死亡态,激活态和休眠态,通过只对处于激活态的空间对象进行相交计算,这样充分利用了检测过程中位于虚拟扫描轨迹前后分区内空间对象之间的联系,对检测过程进行了优化,减少了场景内各个空间对象间大量不必要的相交检测,在大大提高了算法效率同时,也解决了大数据量复杂场景内相交检测的实时性问题。
文档编号G06T17/00GK101877141SQ20091023426
公开日2010年11月3日 申请日期2009年11月18日 优先权日2009年11月18日
发明者周良辰, 王永君, 王永志, 盛业华, 赵林林 申请人:南京师范大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1