基于分离轴定理的二维游戏碰撞检测算法

基于分离轴定理的碰撞检测算法


如图所示,如果两个图形在某条线上的投影重叠,那么这两个图形就相交(黄色部分表示重叠部分)。
这里写图片描述
读者可能立马想到下面的情况,投影相交但是图形不相交。
这里写图片描述
但是却一定至少存在一条线,使这两图形在这条线上的投影没有交集,如:
这里写图片描述
试比较这两种情况的区别。

如果两个图形不相交,必然至少存在一条线,使这两个图形在这条线上的投影没有交集。如果图形相交,那么这条线一定不存在。这就是算法的核心。要实现算法,枚举所有可能的线判断是否存在投影没有交集的情况。而在二维平面中,两个多边形的每条边的法向量包含了这条轴的所有可能性,所以我们只要枚举所有边的法向量即可。

  • 计算一条边的法向量
    如果多边形的一条边的向量是(x,y),这条边的法向量就是(-y,x)或(y,-x)。

  • 计算每条边在法向量(轴)上的投影,找出最大值和最小值
    如果法向量的坐标是(x1,y1),边的坐标是(x2,y2),边在法向量上的投影dot计算方法如下

    temp1=x2x
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值