首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

动态OBB碰撞检测(分离轴定理):找出碰撞发生的时间?

动态OBB碰撞检测(分离轴定理)是一种用于检测物体之间是否发生碰撞的算法。它基于分离轴定理,通过检查物体的边界框(OBB,Oriented Bounding Box)之间是否存在重叠来判断碰撞的发生。

在动态OBB碰撞检测中,我们需要找出碰撞发生的时间。具体的步骤如下:

  1. 确定碰撞参与的物体:首先,我们需要确定参与碰撞的两个物体,这两个物体通常都有一个边界框(OBB)来表示它们的形状和位置。
  2. 计算碰撞轴:接下来,我们需要计算碰撞轴,也就是两个物体之间可能存在重叠的轴。对于每个物体,我们可以通过计算其边界框的边向量来得到一组可能的碰撞轴。
  3. 投影计算:然后,我们需要将物体投影到每个碰撞轴上,并计算它们在该轴上的投影区间。通过比较两个物体在每个轴上的投影区间,我们可以判断它们是否存在重叠。
  4. 碰撞检测:如果在所有的碰撞轴上都存在重叠,那么我们可以确定碰撞发生了。此时,我们可以进一步计算碰撞发生的时间,通常使用插值法来估计碰撞发生的时间点。

动态OBB碰撞检测在游戏开发、物理模拟等领域有广泛的应用。它可以用于检测游戏中的碰撞事件,例如角色与障碍物的碰撞、子弹与敌人的碰撞等。通过及时检测碰撞,我们可以实现更加真实和精确的物体交互效果。

腾讯云提供了一系列与碰撞检测相关的产品和服务,例如云游戏解决方案、物理引擎服务等。您可以通过访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于这些产品的详细信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

图形编辑器开发:基于相交策略选中图形

(理论上应该做性能测试对比各种实现,还要考虑用户使用选区场景,是否会经常出现特定算法最坏时间复杂度情形,有空再做吧) 方案2:分离定理算法 这个算法挺有意思。...矩形碰撞,特殊分离定理碰撞 不知道你发现没有,从分离轴线角度去看,两个没有旋转矩形相交判断,其实是一个特例。...这样,图形分离投影也对比完了,所有的分离都对比了,就能判断出选区和图形 OBB 包围盒是否碰撞了。 甚至都不用向量点乘。 OBB 相交判断代码实现 下面给出代码实现。...; } else { // OBB 碰撞检测 // 使用分离定理特殊写法 const { x: cx, y: cy } = el.getCenter();...结尾 矩形相交是分离定理相交算法特殊情况。 我是前端西瓜哥,欢迎关注我,学习更图形编辑器知识。

17430

关于包围盒,你需要知道那些事

AABB 包围盒全称为 axis-aligned bounding box,对齐包围盒。 它是一个矩形,且它边是和轴线(比如 x 和 y )对齐。...判断两个 AABB 包围盒是否发生碰撞很简单: const isBboxIntersect = (bbox1, bbox2) => { return ( bbox1.minX <= bbox2...attrs.height, rotate: attrs.rotate, // 或者用旋转矩阵 } 对于 OBB 之间碰撞判定,需要用复杂一些 分离定理 算法来判断。...分离定理专门用来进行凸多边形之间碰撞检测,矩形也是凸多边形,所以可以用。...此时我们需要是上图这种包围多边形,勉强叫做有 transform box 吧。 因为是线性形变,包围多边形是平行四边形,依旧是凸多边形,所以还是可以分离定理 算法来计算碰撞

30410
  • 碰撞检测向量实现

    注:1、本文只讨论2d图形碰撞检测。2、本文讨论圆形与圆形,矩形与矩形、圆形与矩形碰撞检测向量实现 前言 2D游戏中,通常使用矩形、圆形等来代替复杂图形相交检测。...因为这两种形状碰撞检测速度是最快。...两个矩形OBB检测使用分离定理(Separating Axis Theorem) 分离定理:通过判断任意两个矩形 在任意角度下投影是否均存在重叠,来判断是否发生碰撞。...若在某一角度光源下,两物体投影存在间隙,则为不碰撞,否则为发生碰撞。 因为矩形对边平行,所以只要判断四条对称投影即可。 ? 如何投影?这里补充一下向量点积几何意义。 ?...——常见2D碰撞检测 https://aotu.io/notes/2017/02/16/2d-collision-detection/index.html 码农干货系列【1】--方向包围盒(OBB)碰撞检测

    1.5K10

    粗略物体碰撞预测及检测

    尽管非常精确碰撞检测算法可以精确地表示和解决碰撞问题,但是在路径规划初期对碰撞只需要有一个初步估计,比如是否会发生碰撞碰撞大概程度如何,以免把大量精力浪费在碰撞检测问题上,从而降低了在其他方面的注意力...图中红色区域为物体A与物体B投影重叠部分。 二维场景中AABB碰撞检测具有如下规则:物体A与物体B分别沿两个坐标做投影,只有在两个坐标发生重叠情况下,两个物体才意味着发生碰撞。   ...碰撞示意如下图: ? 三维场景中AABB碰撞检测具有如下规则:物体A与物体B分别沿三个坐标做投影,只有在三个坐标发生重叠情况下,两个物体才意味着发生碰撞。   ...运动多面体   在使用单步碰撞检测时,存在时间步长较大时会发生两个物体完全穿透而算法却未检测出来问题,如下图所示。...相对于AABB碰撞检测,还有一种更逼近物体并更为精确一种算法--OBB碰撞检测OBB   未完待续 参考文献和资源(不分先后) [1] Gottschalk, Stefan, Ming C.

    2.8K81

    粗略物体碰撞预测及检测

    尽管非常精确碰撞检测算法可以精确地表示和解决碰撞问题,但是在路径规划初期对碰撞只需要有一个初步估计,比如是否会发生碰撞碰撞大概程度如何,以免把大量精力浪费在碰撞检测问题上,从而降低了在其他方面的注意力...二维场景中AABB碰撞检测具有如下规则:物体A与物体B分别沿两个坐标做投影,只有在两个坐标发生重叠情况下,两个物体才意味着发生碰撞。   ...碰撞示意如下图: [81364644.jpg]   三维场景中AABB碰撞检测具有如下规则:物体A与物体B分别沿三个坐标做投影,只有在三个坐标发生重叠情况下,两个物体才意味着发生碰撞...[68475964.jpg] [3866616.jpg] [58966858.jpg] 运动多面体   在使用单步碰撞检测时,存在时间步长较大时会发生两个物体完全穿透而算法却未检测出来问题,如下图所示...相对于AABB碰撞检测,还有一种更逼近物体并更为精确一种算法--OBB碰撞检测OBB   未完待续 参考文献和资源(不分先后) 1 Gottschalk, Stefan, Ming C.

    1.9K60

    2D刚体动力学开源模拟器Dyna-Kinematics

    话不多说,先给出1个仿真案例 Cool_Dino.gif 该动力学模拟器主要包含以下三部分,即(1)数值积分器(2)2D刚体动力学(3)2D平面碰撞检测。...a1.gif 2 Body-body collisions 开发过程第二步是实现对物体之间碰撞支持。 这种类型碰撞可能以两种不同方式发生:两个顶点之间或顶点与边之间。...重复之前步骤,直到没有渗透发生为止。 您可以将此过程视为二进制搜索,以查找可以推进没有场景发生场景时间量。 Stack_CR_0_5.gif 每个实体均表示为定向边界框(OBB)。...不支持OBB与墙形成拐角之间碰撞。 因此,墙壁必须形成凸形,以确保永远不会发生无支撑碰撞OBB之间冲突分为两类:顶点-顶点冲突和顶点-边缘冲突。...对于顶点-顶点碰撞,将碰撞质心连接起来线用作碰撞法线。通过解决简单几何问题可以检测到碰撞。 没有像分离定理那样复杂东西被使用。

    2.3K4034

    你被追尾了

    ,下面仅仅写出最为核心检测碰撞逻辑, 而省略掉了其他诸如canvas绘制逻辑. // 矩形碰撞检测逻辑,返回true 表示发生碰撞, 返回false 表示未发生碰撞, 下同 function...只需要找出 矩形上离圆心最近点,然后通过判断该点与圆心距离是否小于圆半径,若小于则为碰撞。 那么如何找出矩形上离圆心最近点呢?...分离定理(Separating Axis Theorem SAT) 通过判断任意两个 凸多边形 在任意角度下投影是否均存在重叠,来判断是否发生碰撞。...这就是分离定理名字由来. ? 但是程序中遍历所有光源角度是不现实,那如何确定 投影 呢?其实投影数量与多边形边数相等即可。 ?...显然,分离算法适用于圆形、凸多边形之间碰撞检测. 还是有一定价值. 关于 SAT 定理,还有更为优秀 GJK 碰撞检测算法. GJK 比 SAT 更适用于推广到 3D 场景.

    4.6K30

    【带着canvas去流浪(8)】碰撞

    在canvas中模拟碰撞 3.1定义小球属性 3.2 生成新小球 3.3 帧动画绘制函数step 3.4 定义小球update方法 3.5 碰撞检测 3.6 碰撞仿真 四. 下一步 ?...碰撞检测 碰撞检测一般包括精灵是否与其他精灵发生碰撞,并需要对碰撞后造成影响进行仿真。...规则形状碰撞检测一般有某些特殊方法,例如平面内小球,其实只需要判断圆心距离和两球半径和大小,就可以知道两球是否碰撞。...而当检测物体外观并不规则时,碰撞检测是成了一个非常复杂问题,最常用方法包括外接盒检测,光线投射法和分离定理检测,感兴趣小伙伴可以自行查资料进行学习。...本例中碰撞可以抽象为两个质量相等运动小球非对心碰撞,且不计能量损失,一般情况下需要使用能量守恒定理和动量守恒定理联立方程进行求解。

    1.1K20

    JAVA智能设备基于OpenGL3D开发技术 之AABB碰撞检测算法论述

    摘要:无论是PC机3D还是智能设备应用上,碰撞检测始终是程序开发难点,甚至可以用碰撞检测作为衡量3D引擎是否完善标准。...现有许多3D碰撞检测算法,其中AABB碰撞检测是一种卓有成效而又经典检测算法,本文将为读者详细论述AABB碰撞检测各各技术点。...,那样运算量对手机等设备来讲是不可完成,所以移动设备上使用碰撞检测不可能使用 太精确检测,而且对于3D碰撞检测问题,还没有几乎完美的解决方案。...当t=tenter时,两个AABB刚刚相交,当t=tleave时,两个AABB脱离碰撞。 对照相馆上图,可以推导出两个AABB接触和离开时间: AABB动态检测有3个要点。...(3)   如tenter和tleave超出运动时间范围,那么在此范围内它们是不相交。 检测出某一维碰撞还不够,还需要进行其它两维检测,然后取结果交集。

    1.2K100

    机器人碰撞检测方法形式化

    据腾讯新闻报道, 2021年7月, 位于伦敦东南部英国电商Ocado仓库发生机器人碰撞事故, 导致了火灾发生....这类方法虽然能够缩短计算时间, 但会受限于图像分辨率, 可能导致不准确碰撞检测结果产生....上述工作为定理证明方法在机器人碰撞问题分析提供了基础思路.综上所述, 基于定理证明机器人碰撞检测算法验证研究尚属空白....针对该问题, 本文在定理证明器中建立了机器人碰撞检测方法基础定理库并对机器人碰撞检测方法进行了形式化建模与验证, 为实现多机系统碰撞检测算法可靠性和稳定性验证提供了技术支撑和验证框架.2.背景知识HOL-Light...值得注意是, 在HOL-Light定理证明器已存在作为基本几何体球体形式化定义及相关性质定理, 这为本文工作提供了良好工具支撑.机器人碰撞检测方法机器人碰撞检测方法是通过由实际场景所得机器人姿态参数

    66340

    物理引擎

    下载地址:http://www.kloonigames.com/blog/games/crayon 作者:http://www.kloonigames.com/blog/        box2d碰撞检测采用...分),之后根据包装盒距离、位置等信息来计算是否发生碰撞.       2D游戏中有许多图片都是方方正正,所以我们不必把碰撞范围画成一个圆,而是画成一个方。...这个正方形,或者说是一个四边形和坐标是对齐,所以运用数学上一些方法,比如距离计算等还是比较方便。...这个检测方法就叫AABB碰撞检测,        游戏中已经运用非常广泛了,因为其速度快,效率高,计算起来非常方便,精确度也是可以忍受。  做到这一步,许多游戏需求都已经满足了。...但是,总是 有人希望近一步优化,而且方法也是非常陈旧:继续对物体各个部分进行细分,对每个部件做AABB矩形,那这个优化以后系统就叫做OBB系统 (Box2D.Collision.b2OBB类)。

    1.6K50

    腾讯地图JavaScript API GL实现文本标记碰撞避让

    前言 本文主要是总结一下web页面中旋转矩形碰撞检测碰撞算法本身并不难,只是需要注意web坐标系在计算中影响。...碰撞检测应该是在游戏等场景中很常见且基础功能,本文记录了在JavaScript API GL遇到了这类碰撞问题调研和实现过程。...比较常见一种方式是通过分离定律(SAT:Separating Axis Theorem)来计算,分离定义:两个凸多边形物体,如果能找到一个,使得两个物体在该投影互不重叠,那么这两个物体就没有发生碰撞...红色线段则是两个矩形中心点连线,同样需要计算它在蓝色线段所在X投影长度,如果中心点连线投影长度大于两个矩形半径投影之和,那么在这条上两个矩形没有碰撞,否则发生碰撞。...检测最终是否碰撞,需要对四个分离都检测一次,在任何一个上没有碰撞,则两个矩形就没有碰撞

    1.5K40

    Box2DSharp使用手册#3

    关于BroadPhase:物理系统会在碰撞处理之前进行碰撞检测,而如果进行完全碰撞检测需要对所有物体两两之间进行遍历,效率为N^2。...因此提出了BroadPhase概念,在这一步中利用算法进行粗略AABB检测,以快速筛选出那些物体有可能会发生碰撞。...计算接触点:1、遍历所有的接触点并分别进行判断(1)如果接触点所属两个Body不会发生碰撞个,或者接触点所属两个夹具不会发生碰撞,或者两个夹具代理在经过BroadPhaseAABB重叠检测后没有发生重叠...,则删除该碰撞点 (2)如果接触点发生碰撞,则更新改点监听。...2、通过GJK算法算出两物体间距离,根据距离判断是否碰撞 3、通过SAT分离算法看是否能找出两物体间分离,如果找得出就没有碰撞,找不出则碰撞。 最后,第五步。

    94920

    关于碰撞检测

    碰撞检测就是查看物体是否重合。 碰撞检测常用于游戏开发,通过碰撞检测判断前面是否有障碍物以及两个物体是否发生碰撞,根据检测结果做出不同处理。...圆心在矩形正上下方 同理,对于 y (此处不列举图例): 如果圆心在矩形上方(if(circle.y< rect.y)),那么 closestPoint.y =rect.y。...因此,通过上述方法即可找出矩形上离圆心最近点了,然后通过『两点之间距离公式』得出『最近点』与『圆心』距离,最后将其与圆半径相比,即可判断是否发生碰撞。...closestPoint.x - circle.x, 2) +Math.pow(closestPoint.y - circle.y, 2)) if(distance < circle.r) return true // 发生碰撞...else return false // 未发生碰撞 4.圆形与旋转矩形 将矩形旋转看成是画布旋转,求出旋转前圆心坐标,就可以用圆形与矩形碰撞检测了 附: 关于两个矩阵碰撞感悟:

    1.1K10

    游戏开发中进阶向量数学

    游戏开发中进阶向量数学 飞机 到飞机距离 远离原点 以2D方式构建平面 飞机一些例子 3D碰撞检测 更多信息 飞机 点积具有带有单位向量另一个有趣属性。...这称为分离定理(或SAT),大多数物理引擎都使用它来检测碰撞。 对于一个点,仅检查飞机是否返回正距离就足以确定该点是否在外面。...您可能想知道非凸多边形会发生什么。通常可以通过将凹面多边形拆分为较小凸面多边形,或使用诸如BSP(如今已不多使用)之类技术来处理。 3D碰撞检测 这是另外一个奖励,是对耐心和遵守本篇教程奖励。...这可能不是直接用例(Godot已经很好地进行了碰撞检测),但是几乎所有物理引擎和碰撞检测库都在使用它:) 还记得将2D中凸形转换为2D平面数组对于碰撞检测很有用吗?...好吧,这也适用于3D,如果两个3D多面体形状发生碰撞,您将无法找到分离平面。如果找到分离平面,则形状绝对不会碰撞

    86740

    Unity基础(12)-物理系统

    2.什么是刚体 刚体使物体接受物理控制,可以使物理实现移动 刚体就是模拟现实物体运动状态,物体添加刚体后将受重力影响,并可以与其他物体发生碰撞。...来平滑此次transform Collision Detection 碰撞检测方式(枚举)控制避免高速运动游戏对象穿过其他游戏对象昂而未发生碰撞 Discrete:离散碰撞检测 Continuous...:连续碰撞检测:用于检测与动态碰撞体(带有rigidbody)碰撞,使用连续碰撞检测模式来检测与网格碰撞(不带rigidbody)碰撞。...此模式用于连续动态碰撞检测对象相碰撞对象。如果不需要对快速运动物体进行碰撞检测,请使用离散 Continuous Dynamic : 连续动态碰撞检测。...检测与采用来连续碰撞模式或连续动态碰撞模式对象碰撞,一般用于检测快速运动游戏对象 Constraits 冻结位置和旋转 4-方法 ?

    1.7K10

    pygame-KidsCanCode系列jumpy-part13-改进跳跃

    原因:连续碰到多个跳板时,碰撞检测返回是一个被碰到跳板数组,hits[0]返回是最高那块,所以总是被吸上去。 改进思路:找出最低那块,后面的就好处理了。...当player走到跳板边缘时,实际上确实发生碰撞(从垂直方向上看,player身体与跳板有重叠,即碰撞),但从视觉上看,双脚已经离开跳板了,应该向下掉,看上去不太真实。...改进办法: 发生碰撞时,对比player.centerx(角色x中心点)与跳板left/right值,只有x中心点未离开跳板时,才认为真正发生碰撞。...仍然是修改刚才碰撞检测代码:(注:具体实现时,下面的代码在两侧保留了5px余量,大家可以调整下这个值,以控制检测灵敏度) def update(self): self.all_sprites.update...分析一下其中原理,其实按键较重时,『按下时间』相对轻轻一按马上抬起,会略长一点。所以,关键在于KEYUP事件,只要在该事件中,想办法快速终止跳跃,自然向上跳高度就小。

    44340

    unity3d-物理引擎(一)

    外插值 Extrapolate :基于下一帧预估变换来平滑本帧变换。 碰撞检测 Collision Detection:碰撞检测模式。...快速移动刚体在碰撞时有可能互相穿透,可以设置碰撞检测频率,但频率越高对物理引擎性能影响越大。 不连续 Discrete:不连续碰撞检测。适用于普通碰撞(默认模式)。...连续 Continuous:连续碰撞检测动态连续 Continuous Dynamic:连续动态碰撞检测,适用于高速物体。 约束 Constraints:对刚体运动约束。...冻结位置 Freeze Position:刚体在世界中沿所选X,Y,Z移动,将无效。 冻结旋转 Freeze Rotation:刚体在世界中沿所选X,Y,Z旋转,将无效。...凸起Convex:不激活则网格碰撞器间没有碰撞效果; Mesh网格:用于碰撞所引用网格。碰撞条件 两者具有碰撞组件。 运动物体具有刚体组件。

    1.4K20

    真·降维打击:这篇SIGGRAPH 2020论文帮你「想象」三维生物眼里四维空间

    三个空间维度加一个时间维度?不,那是四维时空,跟四维空间是两个不同概念。 四维空间第四个维度也是空间维度,和我们熟知 x、y、z 属于同一性质。...在这篇论文中,研究者提出了一个适用于任何空间维度刚体动力学公式。用几何代数来描述刚体状态和运动方程。他将碰撞检测算法扩展到?维,解析了物体之间碰撞和接触。...但作者提出,使用所需方程式恰当公式,就有可能将它们推广到更高维度。几何代数提供了一个简单与维度无关公式,可以实时操作相互碰撞 n 维物体,就好像它们是真实物体一样。...这样一来,就可以在 n 维中建立欧拉方程,比如研究四维欧拉方程在无力矩条件下情况。 2、计算 n 维中碰撞和接触处理过程,包括静摩擦和动摩擦。...作者给出了 Minkowski 差分法和基于几何代数分离定理碰撞检测方法 n 维公式。 3、提出了一种类似于我们对现实三维空间体验四维物体互动方法。

    61530
    领券