如何判断两个矩形是否相交,两个矩形不是固定角度,而是有转角

现在检测两个矩形是否有碰撞,又不能用系统自带碰撞系统,只能自己写,两个矩形的角度固定还可以方便判断是否有相交,但是如果两个矩形都有自己的转角就不知道如何写碰撞判定了。各位大神有知道的吗?

用物理碰撞检测,任意形状都行,:grin:

OBB碰撞检测

creator的范例集合有案例

https://docs.cocos.com/creator/api/zh/classes/Rect.html#intersects

做同步对战游戏,引擎的物理碰撞不能用啊,只能自己写碰撞

我做的是帧同步对战游戏。creator案例的都用不了,那是creator自己提供的碰撞系统,在不同机器上帧率不同,浮点数精度也不同,根本不能用,只能自己写碰撞系统

这个是两个矩形角度固定是0的碰撞检测,我用几何算法也能算得出交集。我说的是两个矩形不同角度,比如一个45度,一个120度,判断两个矩形是否相交。场景里的角色总不可能不用转身

可以判断一个矩形的顶点是否在另一个矩形里判断是否相交

1赞

PieceBase.zip (1.9 KB)可以参考一下

判断一个点 是否 在有旋转角度矩形中,麻烦

两个相同大小的正方形,位置一样,一个0度,一个45度,刚好组成正8角星,没有谁的任何一个顶点在另一个正方形内,这个算法不是绝对正确

做cocos引擎的大佬,你们应该知道如何实现有旋转角度的矩形的碰撞检查,因为cocos引擎的的碰撞系统就是各种不同角度的碰撞图形间做碰撞检测的。你们能否分享一下算法

做实时检测一般都是顶点先碰撞,除非物体速度太大

用两个矩形的四个顶点 分别判断是否与另一个矩形相交

先判断一下中心点距离:grin:

可以考虑下奇偶穿边算法额,

两个多边形啊,判断两个多边形是否相交
cc.Intersection.polygonPolygon(a: Vec2[], b: Vec2[]): boolean;

对于你说的旋转矩形碰撞,不管是碰撞系统还是物理引擎,实现原理都是obb算法,俗称分离轴投影算法,你网上查一下会有很多资料的,只是如果想把这一块做完善了,还需要有一些策略保证效率问题,因为obb还是比较消耗性能的,特别是物理系统下,每个物理帧都要跑这个算法,所以通常会做包围盒,然后用包围盒计算aabb,任何刚体先用包围盒aabb判断一次,通过判断了才会用obb二次判断,这样提升效率。当然了,如果你不是写物理系统不需要每个物理帧判断,只是想普通的判断一次,不考虑效率,那也可以用辅助类Intersection里提供的多边形相交计算,这里面都是用判断边与边相交的方法计算的,不太适用高频判断的物理引擎,但是做单次判断还是很有效的

1赞

多谢,最近在看obb算法原理