Planning-碰撞检测之分离轴定理(SAT)

本文详细介绍了分离轴定理(SAT),一种用于检测两个凸多边形是否相交的算法。通过遍历每个凸多边形边的法向量作为分离轴,计算投影并检查是否有重叠来确定相交情况。同时,文中还阐述了如何计算最小翻译向量(MTV),即使两个相交的凸多边形分开所需的最小距离和方向。该方法在游戏开发和物理模拟等领域有广泛应用。

原文:dyn4j-SAT (Separating Axis Theorem)

sat(分离轴定理)用来检测两个凸多边形是否相交,也可以用于检测点是否在凸多边形内。凸多边形内的点的连线上的点都在凸多边形内,或者连线只和图多边形相交两次(边界处)。
在这里插入图片描述在这里插入图片描述

1. 原理

如果凸多边形在某个轴上的投影不重叠,则两个凸多边形不相交。需要对所有的轴(每个边的法向量)进行投影,存在一个轴上的投影不相交,则两个凸多边形不相交。如果所有轴上的投影都相交,则多边形相交。
在这里插入图片描述在这里插入图片描述

Axis[] axes = // get the axes to test
// loop over the axes
for (int i = 0; i < axes.length; ++i) {
    Axis axis = axes[i];
    // project both shapes onto the axis
    Projection p1 = shape1.project(axis);
    Projection p2 = shape2.project(axis);
    // do the projection overlap?
    if (!p1.overlap(p2)) {
        // the we can gurantee that the shapes do not overlap
        reture false;
    }
}
// if we get here then we know that every axis had overlap on it 
// so we can guarantee an intersection
return ture;

2. 分离轴

分离轴是凸多边形每个边的法向量。做碰撞检测的两个凸多边形的所有边都需计算其法向量。如果只需要计算两个凸多边形是否碰撞,则分离轴不需要归一化;如果需要计算 M T V MTV

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值