圆和矩形是否相交

发布时间 2023-11-05 00:44:31作者: yanghui01

1) 矩形的中心作为原点,建立坐标系。

2) 通过圆到矩形的最短距离<=r来判断是否相交,几种情况

2-a) bc.x>0&bc.y>0时,圆到矩形的最短距离为|bc|,所以|bc|>r则圆和矩形没有相交

 

2-b) bc.x<=0&bc.y>0时,圆到矩形的最短距离为|bc.y|即|dc|,把bc.x=0就能得到dc向量,所以|dc|>r则圆和矩形没有相交

 

2-c) bc.x>0&bc.y<=0时,圆到矩形的最短距离为|bc.x|即|dc|,把bc.y=0就能得到dc向量,所以|dc|>r则圆和矩形没有相交

 

2-d) bc.x<=0&bc.y<=0,圆和矩形一定相交

 

3) 如果圆在其他象限,跟第一象限是类似的,因为矩形在四个象限中大小是完全相同的,所以我们这边可以将圆转换到第一象限来算。

 

//圆和矩形是否相交
public static bool IsCircleRectIntersect(Vector2 a, Vector2 b, Vector2 c, float r)
{
    var o = (b - a) * 2; //矩形中心点
    //将矩形中心点作为原点建立坐标系
    a -= o;
    b -= o;
    c -= o;

    //将圆转换到第一象限
    c.x = Mathf.Abs(c.x);
    c.y = Mathf.Abs(c.y);

    //圆心到矩形的最短距离
    var bc = c - b;
    bc.x = Mathf.Max(bc.x, 0);
    bc.y = Mathf.Max(bc.y, 0);

    //最短距离<=r, 则和矩形相交
    return bc.sqrMagnitude <= r * r;
}

 

参考

【数学基础】玩法常用几何计算汇总 - 知乎 (zhihu.com)

Cocos Creator实现四叉树2D碰撞检测 ---(1)几何图形碰撞原理 - 知乎 (zhihu.com)

矩形、圆和直线之间的碰撞检测_计算圆形和矩形碰撞检测-CSDN博客