首页 > 其他分享 >碰撞检测

碰撞检测

时间:2024-06-17 15:36:35浏览次数:17  
标签:分离 矢量 碰撞 碰撞检测 包围 方向 做叉积

1、做各自的obb包围盒

2、找到一个轴,两个凸形状在该轴上的投影不重叠,则这两个形状不相交。

 

针对某一分离轴L,如果包围盒A与包围盒B在轴L上的投影的半径和小于包围盒中心点间距在L的投影距离,那么包围盒A与包围盒B处于分离状态。使用运算式来表达就是:|T * L|>rA + rB。

 现在知道了分离轴定理的原理,下面则是如何选取分离轴。由于潜在的分离轴可能存在无数种,所以我们并非去要逐个验证,而是选取几个可测试的轴即可。我们以长方体的碰撞为例,两个长方体的碰撞可以将其归结为以下几种组合:面-面碰撞、面-边碰撞、边-边碰撞(顶点视为边的一部分)。所以实际上在取分离轴的时候,只需要分别取第一个包围盒的3个坐标轴,第二个包围盒的3个坐标轴,以及垂直于某一轴的9个轴(其他的分离轴都是跟这15个分离轴中的某一个轴平行的轴,投影所得线段值都一样,无需再验证)。

       这里再解释以下什么是垂直于某一轴的9个轴,具体的做法就是,首先取包围盒A的x轴方向的某一边矢量,再取包围盒B的x轴方向的某一边矢量,对两个矢量做叉积,求出一个垂直于A的矢量与B的矢量的方向矢量,这个结果就是需要使用的分离轴。按照这种做法,取A的x轴方向的边矢量分别与B的三个轴方向的边矢量做叉积,再取A的y轴方向与B的三个轴方向的边矢量做叉积,再取A的z轴方向的边矢量与B的三个轴方向的边矢量做叉积,结果一共3*3个分离轴。

 

标签:分离,矢量,碰撞,碰撞检测,包围,方向,做叉积
From: https://www.cnblogs.com/tjguo/p/18252472

相关文章

  • UE4中PhysX BroadPhase(碰撞检测的粗略阶段)
    PhysX的BroadPhase(碰撞检测的粗略阶段),具体是用AABB(轴向包围盒)来做碰撞检测具体算法有两种:SAP(SinglePruningBox,单个剪枝盒)和MBP(MultiPruningBox,多个剪枝盒) SAP(Single PruningBox,单个剪枝盒)当场景中有大量的物体(大世界有百万级别)时,即使它们已按AABB的三个轴向xyz做了排序......
  • Unity物体之间碰撞检测的方法
    检测碰撞有两种方式,一种是利用碰撞器,另外一种就是触发器。碰撞器的种类:1.StaticCollider静态碰撞器指的是相互碰撞的两个物体没有附加刚体而只附加了Collider的游戏对象。这类对象在碰撞时会保持静止,发生碰撞时不会触发任何的方法函数。 2.RigidbodyCollider刚体碰撞器......
  • 运动规划_碰撞检测算法之分离轴定理
    运动规划:碰撞检测算法之分离轴定理附赠自动驾驶全套学习资料和量产经验:链接如上文所述,基于包围形的方法是一种粗略的碰撞检测方法,基于外接圆形的方法运算速度很快,但精度很差;基于轴对齐包围矩形(AABB)的方法适合本身就是矩形的物体,其运算速度非常快,但检测精度还是不够。1......
  • 自动驾驶运动规划:碰撞检测算法之分离轴定理
    运动规划:碰撞检测算法之分离轴定理附赠自动驾驶全套学习资料和量产经验:链接如上文所述,基于包围形的方法是一种粗略的碰撞检测方法,基于外接圆形的方法运算速度很快,但精度很差;基于轴对齐包围矩形(AABB)的方法适合本身就是矩形的物体,其运算速度非常快,但检测精度还是不够。1、OBB......
  • 运动规划碰撞检测算法之GJK算法
    运动规划碰撞检测算法之GJK算法在自动驾驶系统运动规划模块的碰撞检测中,通常分为粗略碰撞检测和精细碰撞检测两个步骤。粗略碰撞检测用来将两个明显不相交的物体快速排除,使用外接圆的包围形或轴对齐包围矩形(AxisAlignedBoundingBox,AABB)都是比较好的方式。外接圆......
  • 四叉树加速碰撞检测
    1)加速原理:排除掉那些不可能发生的碰撞检测,通过减少碰撞检测次数来加速。2)如何排除不可能发生的碰撞检测?就是将一块大区域分割成四个更小的区域,那当只可能第1个区域发生碰撞时,其余3个区域的里的物体就可以排除掉不参与碰撞检测了。比如,待检测的物体在左上的区域时,那我只需要......
  • js 游戏编程:(平滑跟随算法+碰撞检测算法) 贪吃蛇
    相信大家都用c语言写过贪吃蛇吧!今天让我们来试试js写的贪吃蛇!<metaname="viewport"content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no"/><style>@keyframesrot{0%{transform:rota......
  • Three.js中实现对InstanceMesh的碰撞检测
    1.概述之前的文章提到,在Three.js中使用InstanceMesh来实现性能优化,可以实现单个Mesh的拾取功能那,能不能实现碰撞检测呢?肯定是可以的,不过Three.js中并没有直接的API可以实现对InstanceMesh的碰撞检测,需要手动实现回顾本文的描述的Three.js的场景前提:使用InstanceMesh来构建数......
  • 震惊!CSS 也能实现碰撞检测?
    本文,我们将一起学习,使用纯CSS,实现如下所示的动画效果:上面的动画效果,非常有意思,核心有两点:小球随机做X、Y方向的直线运动,并且能够实现碰撞到边界的时候,实现反弹效果小球在碰撞边界的瞬间,颜色发生随机的变化嗯?很有意思的效果。看上去,我们好像使用CSS实现了碰撞检测。然......
  • Three.js中实现碰撞检测
    1.引言碰撞检测是三维场景中常见的需求,Three.js是常用的前端三维JavaScript库,本文就如何在Three.js中进行碰撞检测进行记述主要使用到的方法有:射线法Raycaster包围盒boundingbox物理引擎Cannon.js2.RaycasterRaycaster用于进行raycasting(光线投射),光线投射用于进行鼠......