一种基于经纬度的碰撞检测方法技术

技术编号:14158924 阅读:68 留言:0更新日期:2016-12-12 01:41
一种计算机检测技术领域的一种基于经纬度的碰撞检测方法,包括:(1)预处理三角面片,初始化经纬度数据结构;(2)遍历三角面片,得到各维度所有三角面片形心中心,并进行记录;(3)再次遍历所有的三角面片,计算经度与维度,存放到经纬度数据结构中;(4)计算刀尖面片的经纬度,找到待碰撞面片中最匹配的三角面片,进行精确检测(5)某个三角面片发生变形,拓扑重构的过程只需要对该三角面片进行删除再插入即可;通过经纬度的思想使得所有三角面片的三维坐标转为二维坐标,修改删除与查找都能达到的时间复杂度,提高了碰撞的查询效率,同时增强了查询效率的稳定性,提高了更新节点的效率。

【技术实现步骤摘要】

本专利技术属于计算机检测
,具体涉及一种基于经纬度的碰撞检测方法
技术介绍
随着计算机硬件技术的不断发展,虚拟手术已成为计算机科学的一个重要研究领域,在虚拟手术环境中,由于虚拟手术刀具的移动,与人体的肌肉等网格模型经常可能发生碰撞。为了保持后续的软组织形变,需要系统及时检测到这些碰撞,并作相应的碰撞反应,同时在计算完毕后快速更新数据。通常碰撞检测基于空间域的角度可以分为基于实体空间碰撞检测方法与基于图像空间碰撞检测方法两种。由于图像空间碰撞检测本身是空间离散采样的,其精度受图形分辨率的约束,从而影响碰撞检测的经度,而且该类方法只能适用于图面,因此在虚拟手术系统中的碰撞检测对图形空间碰撞检测不作考虑。而实体空间碰撞检测目前研究最多使用最广泛的则是基于层次包围体树的检测方法。但是该类方法的高效检测则是基于建立一个较为平衡的包围体树的前提下,如果包围体树建立的不平衡,会导致部分节点查询的效率低下。同时,对于节点更新则需要重新自底向上或者自顶向下扫描包围体树,从而达到更新包围体树,这个更新包围体树的过程,几乎就是重新构建一个新树,会严重降低虚拟手术在切割变形操作后的再次碰撞的速度。
技术实现思路
本专利技术提供了一种基于经纬度的碰撞检测方法,通过利用经纬度使得空间的所有三角形的三维坐标成为了二维坐标,然后对各个维度分配一个跳表结构,经度则为跳表排序的关键字,使得碰撞检测与更新速度都能达到跳表所能有的高效,提高了碰撞的查询效率,同时增强了查询效率的稳定性,提高了更新节点的效率。一种基于经纬度的碰撞检测方法,包括如下步骤。(1)对场景中待碰撞的刚体或者软组织物体的边界三角面片信息进行预处理,获取三角面片形心的z坐标最大值Zmax与z坐标最小值Zmin,以及所有三角面片的平均边长length_avg,初始化经纬度数据结构中维度与跳表数组下表的对应关系,同时动态申请三角面片数量大小的动态指针数组,初始化都为NULL,用于存储跳表中的单元地址。(2)遍历三角面片集合,得到各个维度的所有三角面片形心的平均值(中心坐标),记录到经纬度数据结构中。(3)遍历所有的三角面片,每个三角面片都计算得到形心坐标,根据形心坐标得到所处的维度,根据该维度的中心坐标,获取经度,存入对应维度的跳表中。(4)对外部三角面片集合进行碰撞检测时候,计算外部三角面片的形心坐标,根据z坐标得到维度,根据维度得到维度中心坐标,计算经度后在该维度的跳表中查询最近的经度的三角面片,进行两个三角面片进行精确碰撞检测。(5)某个三角面片在外力的作用下发生变形,拓扑重构的过程只需要对该三角面片进行删除后再插入即完成更新。所述的步骤(1)中,初始化经纬度数据结构中维度与跳表数组下表的对应关系的实现过程为:首先计算维度最大值Dimension_Max = (int)((Zmax-Zmin)/ length_avg)+1;然后申请Dimension_Max大小的跳表结构数组;最后得到跳表的下表i与维度的关系则是i = Dimension-1。所述的步骤(2)中,得到各个维度的所有三角面片形心的平均值(中心坐标)的实现过程为:首先申请维度最大值Dimension_Max大小的三个double数组,分别代表各个维度的x,y,z的累加;然后遍历被检测物体的所有的表面三角面片,每个三角面片都计算其形心坐标(x,y,z),得到对应的维度w=(int)((Zmax-z)/length_avg)+1,在三个double数组的下标为w-1的位置,分别累加x,y,z的值,最后三个数组的每个元素都除以三角面片的集合的个数。所述的步骤(3)中,当第m个三角面片插入时,由该m号三角面片的形心坐标,得到维度为w,得到经度为p,那么使用跳表数组的w-1号跳表,则按照经度p作为该跳表的关键字,按照从小到大的排序方式,找到对应的插入位置,申请一个结构体的内存空间,内部存放当前三角面片的序号,插入其中。所述的步骤(4)中,进行两个三角面片进行精确碰撞检测的实现过程为:首先进行包围盒的检测,然后进行穿越算法进行检测。所述的步骤(5)中,对于发生变形的三角面片,根据存储着其跳表中地址的动态数组,根据三角面片的下标得到其跳表中的地址,可以快速进行删除,然后重新计算三角面片的形心,重新计算其维度与经度,加入到对应维度的跳表中。所述的跳表为是一种随机化的数据结构,基于并联的链表,实现简单,插入、删除、查找的复杂度均为O(logN),跳表也是链表的一种,且它在链表的基础上增加了跳跃功能,正是这个跳跃的功能,使得在查找元素时,跳表能够提供O(log n)的时间复杂度,同样,删除,添加都是上限为O(log n)的时间复杂度,它的最底层是所有元素的一个链表,而没上一层,则只有下一层的部分元素,对于每一个元素,其是否在上一层出现的准则是按照概率,50%的可能会出现在上一层。因此上一层的元素应该是有序的,而且从概率上看是下一层元素的50%。 本专利技术的有益技术效果是:通过利用经纬度的思想使得空间的所有三角形的三维坐标成为了二维坐标,然后按照各个维度分配一个跳表结构,经度则为跳表排序的关键字,使得碰撞检测与更新速度都能达到跳表所能有的高效,达到了的时间复杂度,提高了碰撞的查询效率,同时增强了查询效率的稳定性,提高了更新节点的效率。附图说明图1为本发专利技术碰撞检测新方法的步骤流程示意图。具体实施方式为了更为具体地描述本专利技术,下面结合附图及具体实施方式对本专利技术的碰撞检测方法进行详细说明。如图1所示,一种基于经纬度的碰撞检测方法,包括如下步骤。(1)初始化经纬度数据结构,生成跳表数组与动态指针数组;对场景中待碰撞的刚体或者软组织物体的边界三角面片信息进行预处理,使用三个浮点型变量,两个变量用来记录三角面片形心z的最大与最小值,还有一个浮点型变量length_avg用来累加每一个三角形的平均边长,在扫描一遍后,除以三角面片的总数,然后就获取了z坐标最大值Zmax与z坐标最小值Zmin,以及所有三角面片的平均边长length_avg,计算维度最大值Dimension_Max = (int)((Zmax-Zmin)/ length_avg)+1,初始化经纬度数据结构中维度与跳表数组下标的对应关系,例如定义一个函数,函数的传入参数是维度w,传出的参数就是跳表的下标i,跳表的下表i与维度的关系则是i = Dimension-1。动态申请三角面片数量大小的动态指针数组,初始化每个指针都为NULL,每个指针未来都存储当三角面片加入跳表时期在跳表底层链表中的单元地址,可以方便在删除三角形的时候,根据这个地址直接找到三角面片在跳表中的位置,能将其O(1)时间找到,然后删除,这里由于在修改三角面片的时候,先知道三角面片信息发生变化,无法根据其经纬度来查找原始信息,必须要使用该指针数组来辅助搜索。(2)得到各个维度的中心坐标;申请维度最大值Dimension_Max大小的三个double数组,分别代表各个维度的x,y,z的累加;然后遍历被检测物体的所有的表面三角面片,每个三角面片都计算其形心坐标(x,y,z),得到对应的维度w=(int)((Zmax-z)/length_avg)+1,在三个double数组的下标为w-1的位置,分别累加本文档来自技高网...
一种基于经纬度的碰撞检测方法

【技术保护点】
一种基于经纬度的碰撞检测方法,其特征在于,包括以下步骤:(1)对场景中待碰撞的刚体或者软组织物体的边界三角面片信息进行预处理,获取三角面片形心的z坐标最大值Zmax与z坐标最小值Zmin,以及所有三角面片的平均边长length_avg,初始化经纬度数据结构中维度与跳表数组下表的对应关系,同时动态申请三角面片数量大小的动态指针数组,初始化都为NULL,用于存储跳表中的单元地址;(2)遍历三角面片集合,得到各个维度的所有三角面片形心的平均值(中心坐标),记录到经纬度数据结构中;(3)遍历所有的三角面片,每个三角面片都计算得到形心坐标,根据形心坐标得到所处的维度,根据该维度的中心坐标,获取经度,存入对应维度的跳表中;(4)对外部三角面片集合进行碰撞检测时候,计算外部三角面片的形心坐标,根据z坐标得到维度,根据维度得到维度中心坐标,计算经度后在该维度的跳表中查询最近的经度的三角面片,进行两个三角面片进行精确碰撞检测;(5)某个三角面片在外力的作用下发生变形,拓扑重构的过程只需要对该三角面片进行删除后再插入即完成更新。

【技术特征摘要】
1.一种基于经纬度的碰撞检测方法,其特征在于,包括以下步骤:(1)对场景中待碰撞的刚体或者软组织物体的边界三角面片信息进行预处理,获取三角面片形心的z坐标最大值Zmax与z坐标最小值Zmin,以及所有三角面片的平均边长length_avg,初始化经纬度数据结构中维度与跳表数组下表的对应关系,同时动态申请三角面片数量大小的动态指针数组,初始化都为NULL,用于存储跳表中的单元地址;(2)遍历三角面片集合,得到各个维度的所有三角面片形心的平均值(中心坐标),记录到经纬度数据结构中;(3)遍历所有的三角面片,每个三角面片都计算得到形心坐标,根据形心坐标得到所处的维度,根据该维度的中心坐标,获取经度,存入对应维度的跳表中;(4)对外部三角面片集合进行碰撞检测时候,计算外部三角面片的形心坐标,根据z坐标得到维度,根据维度得到维度中心坐标,计算经度后在该维度的跳表中查询最近的经度的三角面片,进行两个三角面片进行精确碰撞检测;(5)某个三角面片在外力的作用下发生变形,拓扑重构的过程只需要对该三角面片进行删除后再插入即完成更新。2.根据权利要求1所述的基于经纬度的碰撞检测方法,其特征在于:所述的步骤(1)中,初始化经纬度数据结构中维度与跳表数组下表的对应关系的实现过程为:首先计算维度最大值Dimension_Max = (int)((Zmax-Zmin)/ length_avg)+1;然后申请Dimension_Max大小的跳表结构数组;最后得到跳表的下表i与维度的关系则是i = Dimension-1。3.根据权利要求1所述的基于经纬度的碰撞检测方法,其特征在于:所述的步骤(2)中,得到各个维度的所有三角面片形心的平均值(中心坐标)的实现过程为:首先申请Dimension_Max大小...

【专利技术属性】
技术研发人员:王沫楠毛志勇李荣鹏陈少勇
申请(专利权)人:哈尔滨理工大学
类型:发明
国别省市:黑龙江;23

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1