System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及模型碰撞检测,尤其涉及一种基于多线程的模型碰撞检测方法。
技术介绍
1、针对计算机仿真中模型碰撞检测,碰撞检测时间会随着模型精细度的提高成倍增加。传统检测方法引入各种过滤器,对无效检测点进行剔除,以期提高检测效率。但对于精细度高、面元数多的模型来说,其耗时问题也不容忽视。
2、因此,需要研发出一种基于多线程的模型碰撞检测方法来解决上述问题。
技术实现思路
1、本专利技术的目的就在于为了解决上述问题设计了一种基于多线程的模型碰撞检测方法。
2、本专利技术通过以下技术方案来实现上述目的:
3、一种基于多线程的模型碰撞检测方法,用于判断判断模型a和模型b是否碰撞,模型碰撞检测方法包括以下步骤:
4、s1、以模型a内部一点为球心建立球面,通过随机抽样算法获得均匀分布在球面上的点集;
5、s2、以球心为初始点,基于球面点集建立射线集:
6、s3、将射线集分成m份,为每个射线子集分配独立子线程;
7、s4、在主线程中启动全部子线程,在子线程中基于子射线集判断两模型是否碰撞,如果碰撞,将标志位置1;
8、s5、主线程中循环等待,当有某子线程计算完成,且子线程对应标志位置1后,认为模型a和模型b碰撞,停止所有子线程;当所有子线程计算完毕,且未有子线程标志位置1,则认为模型a和模型b未碰撞。
9、具体地,在步骤s1中,球心为(xo,yo,zo),以半径r建立球面,通过如下步骤获得
10、s11、通过均匀抽样获得-1到1之间的随机数α和β,如式(1)所示;
11、
12、s12、如果r小于1,通过公式(2)获得点集中的某点坐标;
13、
14、其中,xi、yi、zi为点集中的点坐标值;
15、s13、通过上述步骤获得数量为n均匀分布在球面上的点集
16、具体地,在步骤s4中,在子线程中基于子射线集判断两模型是否碰撞,判断方法为:
17、s41、基于模型b的三角面元坐标,获取其包络矩形的各顶点坐标,进而得到组成包络矩形的12个三角面元;
18、s42、选取子射线集中的某一射线,基于射击迹线的方法,判断该射线是否与12个三角面元相交,如果不相交,进入下一射线判断;
19、s43、如果相交,该射线遍历模型b的所有三角面元,得到与模型b的所有交点;如果不相交,进入下一射线判断;如果相交,基于到达时间,得到与模型b最先相交的点坐标,进入下一步;
20、s44、该射线遍历模型a的所有三角面元,得到与模型a的所有交点;基于到达时间,得到与模型a最后相交的点坐标;
21、s45、基于射线与模型a和模型b的两交点,如果射线最先到达模型a的交点,进入下一射线判断;如果射线最先到达模型b的交点,则认为模型a和模型b碰撞,结束该子线程,并将子线程标志位置1。
22、本专利技术的有益效果在于:
23、本申请将多线程并行计算技术引入模型碰撞检测计算过程中,为适应多线程计算,将计算量分成若干个子集,为每个子集分配一个独立线程,在子集内完成碰撞检测计算,在全部线程计算完成后,对线程计算结果进行数据融合,得到面元模型碰撞检测结果;充分利用并行计算资源,在较短时间内完成精细化面元模型的碰撞检测计算。
本文档来自技高网...【技术保护点】
1.一种基于多线程的模型碰撞检测方法,用于判断判断模型A和模型B是否碰撞,其特征在于,模型碰撞检测方法包括以下步骤:
2.根据权利要求1所述的一种基于多线程的模型碰撞检测方法,其特征在于:在步骤S1中,球心为(xo,yo,zo),以半径r建立球面,通过如下步骤获得数量为n均匀分布在球面上的点集:
3.根据权利要求1所述的一种基于多线程的模型碰撞检测方法,其特征在于:在步骤S4中,在子线程中基于子射线集判断两模型是否碰撞,判断方法为:
【技术特征摘要】
1.一种基于多线程的模型碰撞检测方法,用于判断判断模型a和模型b是否碰撞,其特征在于,模型碰撞检测方法包括以下步骤:
2.根据权利要求1所述的一种基于多线程的模型碰撞检测方法,其特征在于:在步骤s1中,球心为(xo,y...
【专利技术属性】
技术研发人员:陈伟,余春祥,李德贵,孙传杰,卢永刚,
申请(专利权)人:中国工程物理研究院总体工程研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。