CN111062135B - 一种精确的碰撞检测方法 - Google Patents
一种精确的碰撞检测方法 Download PDFInfo
- Publication number
- CN111062135B CN111062135B CN201911310264.6A CN201911310264A CN111062135B CN 111062135 B CN111062135 B CN 111062135B CN 201911310264 A CN201911310264 A CN 201911310264A CN 111062135 B CN111062135 B CN 111062135B
- Authority
- CN
- China
- Prior art keywords
- bij
- pij
- collision
- point
- bounding box
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 60
- 230000035515 penetration Effects 0.000 claims abstract description 17
- 239000013598 vector Substances 0.000 claims description 39
- 238000000034 method Methods 0.000 claims description 18
- 238000004364 calculation method Methods 0.000 claims description 12
- 238000013499 data model Methods 0.000 claims description 11
- 238000004088 simulation Methods 0.000 abstract description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01M—TESTING STATIC OR DYNAMIC BALANCE OF MACHINES OR STRUCTURES; TESTING OF STRUCTURES OR APPARATUS, NOT OTHERWISE PROVIDED FOR
- G01M7/00—Vibration-testing of structures; Shock-testing of structures
- G01M7/08—Shock-testing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Image Analysis (AREA)
Abstract
本发明涉及计算机图形处理领域,尤其涉及一种精确的碰撞检测方法,实现解决仿真、模拟等应用中出现的穿透等不真实的问题。本发明通过粗略的碰撞检测获得潜在的碰撞对,对其进行进一步的精确检测;可以检测各种形状对象间的碰撞,包括凹形对象。发生碰撞时,本发明的精确碰撞检测结果可以输出穿透深度和碰撞点;未发生碰撞时,本发明的精确碰撞检测结果可以输出相距距离和最近点,实现输出详细的精确碰撞检测结果。
Description
技术领域
本发明涉及计算机图形处理领域,尤其涉及一种精确的碰撞检测方法。
背景技术
碰撞检测应用在许多领域,如计算机仿真、物理模拟、实时建模及机器人运动规划中,都起到相当重要的作用,同时碰撞检测也是这些领域发展的主要瓶颈。一些对象间的碰撞检测不仅要输出碰撞与否的结果,还要输出未发生碰撞对象间的距离、发生碰撞后的穿透深度与碰撞的具体位置等信息。
当前比较普遍的碰撞检测模型,主要是三角面片模型结构。一些采用四面体模型的对象,在碰撞检测时通过将其转化为三角面片模型进一步实现。目前比较普遍的碰撞检测方法,主要由两阶段组成,分为粗略碰撞检测(Broad-phase Collision Detection)和精确碰撞检测(Narrow-phase Collision detection)。粗略碰撞检测通过枚举检测所有可能的碰撞对,获得潜在的碰撞对,减少精确碰撞检测的数据处理量;精碰撞检测方法通过检测潜在的碰撞检测对,进一步确定碰撞与否。
粗略碰撞检测方法中,层次包围盒(Bounding Volume Hierarchies,BVH)被广泛应用于各种领域中,可以处理各种模型;而精确碰撞检测方法中,很少有某种方法适用于各种领域。现存的精确碰撞检测方法中,分离轴定理(The Separating Axis Theorem)能较好的处理对象间的碰撞,但不能实现输出穿透深度和碰撞点;GJK算法(The Gilbert-Johnson-Keerthi Algorithm)可以实现对象间的距离计算,但是对数据的处理量较庞大,且只能处理凸形对象。针对于凹形对象的碰撞检测,需要运用凸分解算法将其转化为凸形,增加数据处理复杂度,增加碰撞检测时间。
发明内容
本发明提供了一种精确的碰撞检测方法,能够检测各种领域的三角面片模型的对象,有较强的通用性,可以实现对凹形对象的碰撞检测,输出详细的检测结果,包括距离和碰撞点的数据。
一种精确的碰撞检测方法,包括以下步骤:
第一步:进行粗略碰撞检测,获得潜在的碰撞对[Ai,Aj],其中Ai、Aj分别表示第i、j个包围盒,i,j=1,2,……n,i≠j;
第二步:进行精确碰撞检测:
(1)获得每个潜在碰撞对的包围盒形心(xci,yci,zci)与(xcj,ycj,zcj),得到碰撞对的包围盒向量{Xij,Yij,Zij}:
{Xij,Yij,Zij}={xcj-xci,ycj-yci,zcj-zci} (1)
为了简化计算,将包围盒向量离散化为单位向量
(2)计算包围盒Ai内数据模型在向量aij方向上的上确界,获得支撑点(xsi,ysi,zsi),计算方法通过取包围盒单位向量aij与{Xk,Yk,Zk}点积的最大值,公式表示支撑点为:
其中{Xk,Yk,Zk}表示包围盒Ai内模型数据点(xk,yk,zk)与坐标原点所构成的向量;其中k=1,2,……,mi;
同样计算方法,可以获得包围盒Aj内数据模型在向量aij方向上的下确界,获得支撑点(xsj,ysj,zsj),公式表示为:
或/>
其中{Xk,Yk,Zk}表示包围盒Aj内模型数据点(xk,yk,zk)与坐标原点所构成的向量;其中k=1,2,……,mj;
(3)获得包围盒Ai内数据模型的支撑点(xsi,ysi,zsi)在包围盒Aj内数据模型的最近点(xnj,ynj,znj),计算公式表示为:
同样计算方法,获得包围盒Aj内数据模型的支撑点(xsj,ysj,zsj)在包围盒Ai内数据模型的最近点(xni,yni,zni):
(4)创建支撑点与另一包围盒内数据模型上最近点间的向量,称其为最近点向量,向量方向由包围盒Ai内模型数据指向Aj内模型数据,两个最近点向量表示为:
{Xbij,Ybij,Zbij}={xnj-xsi,ynj-ysi,znj-zni} (6)
{Xpij,Ypij,Zpij}={xsj-xni,ysj-yni,zsj-zni} (7)
(5)判断最近点向量是否与包围盒向量方向相同,通过计算包围盒向量与最近点向量的点积值的正负,即计算aij·{Xbij,Ybij,Zbij}与aij·{Xpij,Ypij,Zpij},判断两个数据模型碰撞与否:若存在点积值为负,则表明发生碰撞;若点积值均为非负,则表明未发生碰撞;
第三步,输出碰撞检测结果:
(1)发生碰撞,当两个点积值均为负时:
若||{Xbij,Ybij,Zbij}||大于||{Xpij,Ypij,Zpij}||,穿透深度表示为||{Xbij,Ybij,Zbij}||,碰撞点表示为Ai内的支撑点(xsi,ysi,zsi)和Aj内的最近点(xnj,ynj,znj);若||{Xbij,Ybij,Zbij}||小于||{Xpij,Ypij,Zpij}||,穿透深度表示为||{Xpij,Ypij,Zpij}||,碰撞点表示为Ai内的最近点(xni,yni,zni)和Aj内的支撑点(xsj,ysj,zsj);
(2)发生碰撞,当只有一个点积值为负时:
若aij·{Xbij,Ybij,Zbij}为负时,穿透深度表示为||{Xbij,Ybij,Zbij}||,碰撞点表示为Ai内的支撑点(xsi,ysi,zsi)和Aj内的最近点(xnj,ynj,znj);若aij·{Xpij,Ypij,Zpij}为负时,穿透深度表示为||{Xpij,Ypij,Zpij}||,碰撞点表示为Ai内的最近点(xni,yni,zni)和Aj内的支撑点(xsj,ysj,zsj);
(3)未发生碰撞,两个点积值均为非负时:
若||{Xbij,Ybij,Zbij}||大于||{Xpij,Ypij,Zpij}||,相距距离表示为||{Xpij,Ypij,Zpij}||,最近点表示为Ai内的最近点(xni,yni,zni)和Aj内的支撑点(xsj,ysj,zsj);若||{Xbij,Ybij,Zbij}||小于||{Xpij,Ypij,Zpij}||,相距距离表示为||{Xbij,Ybij,Zbij}||,最近点表示为Ai内的支撑点(xsi,ysi,zsi)和Aj内的最近点(xnj,ynj,znj)。
本发明的有益效果是:该方法明显优化精确的碰撞检测过程。通过粗略碰撞检测获得潜在的碰撞对,对每个碰撞对的数据模型最多遍历两次,就可输出距离与相应点的详细检测结果信息;较其他流行方法的检测结果详细,处理的数据量也较少,复杂度小;同时还能直接实现凹形对象的碰撞检测。
附图说明
图1为一种精确的碰撞检测方法的流程图;
图2为一种精确的碰撞检测方法的二维对象碰撞检测示意图;
图中标号说明:1.包围盒Ai;2.包围盒Aj;3.包围盒Ai内对象;4.包围盒Aj内对象;5.发生碰撞区域。
具体实施方式
为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明的碰撞检测方法进行详细说明。
本发明提供一种精确的碰撞检测方法,如图1所示的检测方法的流程图,执行相应的步骤,参照图2所示的凹形对象的二维碰撞检测示意图,其主要实施步骤如下:
第一步,执行粗略的碰撞检测,获得潜在的碰撞对[Ai,Aj];其中粗略的碰撞检测方法不局限,使用包围盒的类型不局限,包围盒的类型不会影响精确碰撞检测的准确性和速度;
第二步:进行精确碰撞检测,对粗略碰撞检测的每一对碰撞对进行精确判断是否碰撞:
(1)获得包围盒向量{Xij,Yij,Zij},并将其离散化单位向量aij;
(2)计算包围盒Ai内数据模型的上确界,获得支撑点(xsi,ysi,zsi);计算包围盒Aj内数据模型的下确界,获得支撑点(xsj,ysj,zsj);对于凸形模型,支撑点是唯一的;对于凹形对象,支撑点可能不唯一,但是只取其中之一即可,其结果不影响碰撞检测的准确性;
(3)获得支撑点(xsi,ysi,zsi)在包围盒Aj内数据模型的最近点(xnj,ynj,znj),此步计算可以与获得支撑点(xsj,ysj,zsj)的计算同步进行,只遍历一遍就能实现;获得支撑点(xsj,ysj,zsj)在包围盒Ai内数据模型的最近点(xni,yni,zni),此步计算需要第二次遍历包围盒Ai内的模型数据;
(4)创建支撑点与另一包围盒内数据模型上最近点间的向量,即两个最近点向量{Xbij,Ybij,Zbij}与{Xpij,Ypij,Zpij},计算包围盒向量与最近点向量是否同向,即计算aij·{Xbij,Ybij,Zbij}与aij·{Xpij,Ypij,Zpij}的值;
(5)判断点两个点积值的正负:若存在点积值为负,说明两个对象发生碰撞;若两个点积值均为非负,说明两个对象未发生碰撞;
第三步,输出碰撞检测结果:若发生碰撞,输出穿透深度和碰撞点;若未发生碰撞,输出相距距离和最近点。对于无具体碰撞信息要求的碰撞检测,无需计算穿透深度或相距距离,无需记录碰撞点或最近点,可以进一步提高碰撞检测速度。
以上为对本发明所提供的一种精确的碰撞检测方法的描述,依据本发明实施的思想,在具体实施方式及具体细节上均会有改变之处。综上,本说明书内容不应理解为对本发明的限制。
Claims (2)
1.一种精确的碰撞检测方法,其特征在于实现如下步骤:
第一步:进行粗略碰撞检测,获得潜在的碰撞对[Ai,Aj],其中Ai、Aj分别表示第i、j个包围盒,i,j=1,2,……n,i≠j;
第二步:进行精确碰撞检测:
(1)获得每个潜在碰撞对的包围盒形心(xci,yci,zci)与(xcj,ycj,zcj),得到碰撞对的包围盒向量{Xij,Yij,Zij}:
{Xij,Yij,Zij}={xcj-xci,ycj-yci,zcj-zci} (1)
为了简化计算,将包围盒向量离散化为单位向量
(2)计算包围盒Ai内数据模型在向量aij方向上的上确界,获得支撑点(xsi,ysi,zsi),计算方法通过取包围盒单位向量aij与{Xk,Yk,Zk}点积的最大值,公式表示支撑点为:
其中{Xk,Yk,Zk}表示包围盒Ai内模型数据点(xk,yk,zk)与坐标原点所构成的向量;其中k=1,2,……,mi;
同样计算方法,可以获得包围盒Aj内数据模型在向量aij方向上的下确界,获得支撑点(xsj,ysj,zsj),公式表示为:
其中{Xk,Yk,Zk}表示包围盒Aj内模型数据点(xk,yk,zk)与坐标原点所构成的向量;其中k=1,2,……,mj;
(3)获得包围盒Ai内数据模型的支撑点(xsi,ysi,zsi)在包围盒Aj内数据模型的最近点(xnj,ynj,znj),计算公式表示为:
同样计算方法,获得包围盒Aj内数据模型的支撑点(xsj,ysj,zsj)在包围盒Ai内数据模型的最近点(xni,yni,zni):
(4)创建支撑点与另一包围盒内数据模型上最近点间的向量,称其为最近点向量,向量方向由包围盒Ai内模型数据指向Aj内模型数据,两个最近点向量表示为:
{Xbij,Ybij,Zbij}={xnj-xsi,ynj-ysi,znj-zni} (6)
{Xpij,Ypij,Zpij}={xsj-xni,ysj-yni,zsj-zni} (7)
(5)判断最近点向量是否与包围盒向量方向相同,通过计算包围盒向量与最近点向量的点积值的正负,即计算aij·{Xbij,Ybij,Zbij}与aij·{Xpij,Ypij,Zpij},判断两个数据模型碰撞与否:若存在点积值为负,则表明发生碰撞;若点积值均为非负,则表明未发生碰撞;
第三步,输出碰撞检测结果:发生碰撞时输出穿透深度和碰撞点;不发生碰撞时输出相距距离和最近点。
2.根据权利要求1所述的一种精确的碰撞检测方法,其特征在于,第三步中输出的穿透深度和碰撞点或相距距离和最近点,具体实现方法为:
若发生碰撞,当两个点积值均为负时:若||{Xbij,Ybij,Zbij}||大于||{Xpij,Ypij,Zpij}||,穿透深度表示为||{Xbij,Ybij,Zbij}||,碰撞点表示为Ai内的支撑点(xsi,ysi,zsi)和Aj内的最近点(xnj,ynj,znj);若||{Xbij,Ybij,Zbij}||小于||{Xpij,Ypij,Zpij}||,穿透深度表示为||{Xpij,Ypij,Zpij}||,碰撞点表示为Ai内的最近点(xni,yni,zni)和Aj内的支撑点(xsj,ysj,zsj);当只有一个点积值为负时,穿透深度表示为点积值为负的最近点向量的模,碰撞点表示为构成最近点向量的支撑点与最近点;
若不发生碰撞:若||{Xbij,Ybij,Zbij}||大于||{Xpij,Ypij,Zpij}||,相距距离表示为||{Xpij,Ypij,Zpij}||,最近点表示为Ai内的最近点(xni,yni,zni)和Aj内的支撑点(xsj,ysj,zsj);若||{Xbij,Ybij,Zbij}||小于||{Xpij,Ypij,Zpij}||,相距距离表示为||{Xbij,Ybij,Zbij}||,最近点表示为Ai内的支撑点(xsi,ysi,zsi)和Aj内的最近点(xnj,ynj,znj)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911310264.6A CN111062135B (zh) | 2019-12-18 | 2019-12-18 | 一种精确的碰撞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911310264.6A CN111062135B (zh) | 2019-12-18 | 2019-12-18 | 一种精确的碰撞检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111062135A CN111062135A (zh) | 2020-04-24 |
CN111062135B true CN111062135B (zh) | 2024-01-02 |
Family
ID=70302222
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911310264.6A Active CN111062135B (zh) | 2019-12-18 | 2019-12-18 | 一种精确的碰撞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111062135B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111514587B (zh) * | 2020-04-27 | 2021-05-11 | 网易(杭州)网络有限公司 | 信息处理方法、装置、设备及存储介质 |
CN111968149B (zh) * | 2020-07-17 | 2022-03-22 | 哈尔滨理工大学 | 一种大规模场景中的粗碰撞检测方法 |
CN113838215A (zh) * | 2021-07-30 | 2021-12-24 | 歌尔光学科技有限公司 | Vr碰撞检测方法及系统 |
CN115952569B (zh) * | 2023-03-14 | 2023-06-16 | 安世亚太科技股份有限公司 | 仿真方法、装置、电子设备及计算机可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100791411B1 (ko) * | 2006-12-07 | 2008-01-07 | 한국전자통신연구원 | 그래픽스 처리장치 및 방법 |
KR20130072465A (ko) * | 2011-12-22 | 2013-07-02 | 이화여자대학교 산학협력단 | 다각형 모델의 침투 깊이 연산 방법 |
CN104680006A (zh) * | 2015-02-11 | 2015-06-03 | 北京航空航天大学 | 基于曲面精确表示的碰撞检测方法 |
CN106202247A (zh) * | 2016-06-30 | 2016-12-07 | 哈尔滨理工大学 | 一种基于经纬度的碰撞检测方法 |
CN106197928A (zh) * | 2016-06-30 | 2016-12-07 | 哈尔滨理工大学 | 一种基于虚拟球的包围盒碰撞检测方法 |
-
2019
- 2019-12-18 CN CN201911310264.6A patent/CN111062135B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100791411B1 (ko) * | 2006-12-07 | 2008-01-07 | 한국전자통신연구원 | 그래픽스 처리장치 및 방법 |
KR20130072465A (ko) * | 2011-12-22 | 2013-07-02 | 이화여자대학교 산학협력단 | 다각형 모델의 침투 깊이 연산 방법 |
CN104680006A (zh) * | 2015-02-11 | 2015-06-03 | 北京航空航天大学 | 基于曲面精确表示的碰撞检测方法 |
CN106202247A (zh) * | 2016-06-30 | 2016-12-07 | 哈尔滨理工大学 | 一种基于经纬度的碰撞检测方法 |
CN106197928A (zh) * | 2016-06-30 | 2016-12-07 | 哈尔滨理工大学 | 一种基于虚拟球的包围盒碰撞检测方法 |
Non-Patent Citations (1)
Title |
---|
基于混合层次包围盒碰撞算法的改进;李玉虎;王宗彦;;华东交通大学学报(第06期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111062135A (zh) | 2020-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111062135B (zh) | 一种精确的碰撞检测方法 | |
CN107742102B (zh) | 一种基于深度传感器的手势识别方法 | |
JP6143893B2 (ja) | 3d点の集合にプリミティブ形状をフィッティングする方法 | |
CN108629231B (zh) | 障碍物检测方法、装置、设备及存储介质 | |
KR20190082062A (ko) | 포인트 클라우드 데이터 사이의 매칭 관계를 확정하는 방법 및 장치 | |
JP7314411B2 (ja) | 移動ロボットの障害物情報感知方法、装置 | |
CN110663060B (zh) | 一种用于表示环境元素的方法、装置、系统、以及车辆/机器人 | |
CN106886980A (zh) | 一种基于三维激光雷达目标识别的点云密度增强的方法 | |
US20230386076A1 (en) | Target detection method, storage medium, electronic device, and vehicle | |
CN105654483A (zh) | 三维点云全自动配准方法 | |
WO2021143297A1 (zh) | 物体识别方法及装置、存储介质和计算机程序 | |
JP6119225B2 (ja) | 交差点道路境界検出装置及びプログラム | |
WO2022205663A1 (zh) | 神经网络训练、目标对象检测、行驶控制方法及装置 | |
JP5650021B2 (ja) | 3次元環境復元装置、その処理方法、及びプログラム | |
CN113961738A (zh) | 一种多特征铸件三维模型检索方法及装置 | |
CN115393601A (zh) | 一种基于点云数据的三维目标检测方法 | |
CN117237428B (zh) | 一种面向三维点云的数据配准方法、装置及介质 | |
CN110633749A (zh) | 基于改进视点特征直方图的三维点云识别方法 | |
Shi et al. | Glavnet: Global-local audio-visual cues for fine-grained material recognition | |
JP5928240B2 (ja) | 3次元形状解釈装置及びプログラム | |
CN102135820B (zh) | 一种平面化预处理方法 | |
JP2020034451A (ja) | データ構造、記憶媒体及び記憶装置 | |
CN110287514A (zh) | 基于振动信号处理的超高速碰撞源智能定位方法 | |
CN112364751A (zh) | 一种障碍物状态判断方法、装置、设备及存储介质 | |
JP2004093166A (ja) | 目標識別装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |