求相对坐标轴的AABB包围盒大小

发布时间 2024-01-03 23:16:13作者: yanghui01

abs(旋转矩阵) * halfSize可以用来求相对坐标轴的AABB包围盒halfSize。

 

下面的代码也能求出AABB包围盒的size。

public static Vector2 GetAABBSize(Vector2 boxHalfSize, B2_Mat22 rot)
{
    Vector2[] verts = new Vector2[4];
    verts[0] = new Vector2(-boxHalfSize.x, -boxHalfSize.y);
    verts[1] = new Vector2(-boxHalfSize.x, boxHalfSize.y);
    verts[2] = new Vector2(boxHalfSize.x, boxHalfSize.y);
    verts[3] = new Vector2(boxHalfSize.x, -boxHalfSize.y);

    for (int i = 0; i < 4; ++i)
    {
        verts[i] = rot * verts[i];
    }

    //A在世界空间的包围盒
    Vector2 min = verts[0];
    Vector2 max = min;
    for (int i = 1; i < 4; ++i)
    {
        min = Vector2.Min(verts[i], min);
        max = Vector2.Max(verts[i], max);
    }
    Vector2 aabbSize = max - min;
    return aabbSize;
}


GetAABBSize(boxHalfSize, RotLocalToWorld); //相对世界坐标轴的AABB包围盒大小
GetAABBSize(boxHalfSize, RotLocalAToLocalB); //相对B模型空间坐标轴的AABB包围盒大小