掌桥专利:专业的专利平台
掌桥专利
首页

一种基于多线程的模型碰撞检测方法

文献发布时间:2024-04-18 19:59:31


一种基于多线程的模型碰撞检测方法

技术领域

本发明涉及模型碰撞检测技术领域,尤其涉及一种基于多线程的模型碰撞检测方法。

背景技术

针对计算机仿真中模型碰撞检测,碰撞检测时间会随着模型精细度的提高成倍增加。传统检测方法引入各种过滤器,对无效检测点进行剔除,以期提高检测效率。但对于精细度高、面元数多的模型来说,其耗时问题也不容忽视。

因此,需要研发出一种基于多线程的模型碰撞检测方法来解决上述问题。

发明内容

本发明的目的就在于为了解决上述问题设计了一种基于多线程的模型碰撞检测方法。

本发明通过以下技术方案来实现上述目的:

一种基于多线程的模型碰撞检测方法,用于判断判断模型A和模型B是否碰撞,模型碰撞检测方法包括以下步骤:

S1、以模型A内部一点为球心建立球面,通过随机抽样算法获得均匀分布在球面上的点集;

S2、以球心为初始点,基于球面点集建立射线集:

S3、将射线集分成m份,为每个射线子集分配独立子线程;

S4、在主线程中启动全部子线程,在子线程中基于子射线集判断两模型是否碰撞,如果碰撞,将标志位置1;

S5、主线程中循环等待,当有某子线程计算完成,且子线程对应标志位置1后,认为模型A和模型B碰撞,停止所有子线程;当所有子线程计算完毕,且未有子线程标志位置1,则认为模型A和模型B未碰撞。

具体地,在步骤S1中,球心为(x

S11、通过均匀抽样获得-1到1之间的随机数α和β,如式(1)所示;

S12、如果r小于1,通过公式(2)获得点集中的某点坐标;

其中,x

S13、通过上述步骤获得数量为n均匀分布在球面上的点集

具体地,在步骤S4中,在子线程中基于子射线集判断两模型是否碰撞,判断方法为:

S41、基于模型B的三角面元坐标,获取其包络矩形的各顶点坐标,进而得到组成包络矩形的12个三角面元;

S42、选取子射线集中的某一射线,基于射击迹线的方法,判断该射线是否与12个三角面元相交,如果不相交,进入下一射线判断;

S43、如果相交,该射线遍历模型B的所有三角面元,得到与模型B的所有交点;如果不相交,进入下一射线判断;如果相交,基于到达时间,得到与模型B最先相交的点坐标,进入下一步;

S44、该射线遍历模型A的所有三角面元,得到与模型A的所有交点;基于到达时间,得到与模型A最后相交的点坐标;

S45、基于射线与模型A和模型B的两交点,如果射线最先到达模型A的交点,进入下一射线判断;如果射线最先到达模型B的交点,则认为模型A和模型B碰撞,结束该子线程,并将子线程标志位置1。

本发明的有益效果在于:

本申请将多线程并行计算技术引入模型碰撞检测计算过程中,为适应多线程计算,将计算量分成若干个子集,为每个子集分配一个独立线程,在子集内完成碰撞检测计算,在全部线程计算完成后,对线程计算结果进行数据融合,得到面元模型碰撞检测结果;充分利用并行计算资源,在较短时间内完成精细化面元模型的碰撞检测计算。

附图说明

图1为本申请的流程示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

在本发明的描述中,需要理解的是,术语“上”、“下”、“内”、“外”、“左”、“右”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,或者是本领域技术人员惯常理解的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的设备或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。

此外,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,“设置”、“连接”等术语应做广义理解,例如,“连接”可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接连接,也可以通过中间媒介间接连接,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

下面结合附图,对本发明的具体实施方式进行详细说明。

如图1所示,一种基于多线程的模型碰撞检测方法,用于判断判断模型A和模型B是否碰撞,模型碰撞检测方法包括以下步骤:

S1、在模型A内部取任意一点(x

S11、通过均匀抽样获得-1到1之间的随机数α和β,公式如式(1)所示。

S12、如果r小于1,通过公式(2)获得点集中的某点坐标。

其中,x

S13、通过上述步骤获得数量为n均匀分布在球面上的点集。

S2、以球心为初始点,基于球面点集建立射线集,射线集的速度矢量为公式(3)所示。

S3、将射线集分成m份,为每个射线子集分配独立子线程。每个线程设置一个全局标志位,初始值为0。以C#语言为例,分配线程语句为:my_thread=new Thread(newThreadStart(fun)),其中my_thread为新建线程,fun为碰撞检测函数。

S4、在主线程中启动全部子线程,在子线程中基于子射线集判断两模型是否碰撞,判断方法如下所示:

S41、基于模型B的三角面元坐标

其中,

为模型B包络矩形的中心点坐标;/>

S42、选取子射线集中的某一射线,基于射击迹线的方法,判断该射线是否与12个三角面元相交,如果不相交,进入下一射线判断。射线与面元相交判断方法为:计算射线到达三角面元所在平面时间t,计算公式如式(6)所示,如果t大于等于零,则射击迹线与三角面元所在平面相交,进而计算射线与平面的交点,计算公式如式(7)所示。判断交点是否在三角面元内部,如果交点在三角面元内部,则认为射线与三角面元相交。

其中,

S43、如果相交,该射线以相同方法遍历模型B的所有三角面元,得到与模型B的所有交点。如果不相交,进入下一射线判断;如果相交,基于到达时间,得到与模型B最先相交的点坐标,进入下一步。

S44、该射线遍历模型A的所有三角面元,得到与模型A的所有交点。基于到达时间,得到与模型A最后相交的点坐标。

S45、基于射线与模型A和模型B的两交点,如果射线最先到达模型A的交点,进入下一射线判断;如果射线最先到达模型B的交点,则认为模型A和模型B碰撞,结束该子线程,并将子线程标志位置1。

S5、主线程中循环等待,当有某子线程计算完成,且子线程对应标志位置1后,认为模型A和模型B碰撞,停止所有子线程;当所有子线程计算完毕,且未有子线程标志位置1,则认为模型A和模型B未碰撞。

S6、通过S1-S5步骤,可完成模型A和模型B的快速碰撞检测。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

相关技术
  • 陶瓷件的表面处理方法、壳体组件、指纹模组和电子设备
  • 一种显示模组、电子设备和显示模组的制造方法
  • 包括前壳体、后壳体以及用于固定在所述前壳体与所述后壳体之间的电子电路板的组件
  • 一种棱镜组件、光源模组、背光模组及显示装置
  • 触控显示模组及触控显示装置、电子设备
  • 支撑板、壳体组件、显示模组及电子设备
  • 支撑板、壳体组件、显示模组及电子设备
技术分类

06120116520468