矩形碰撞确定边

Rectangle collision determine side

假设我有一个由点(它的左上角)定义的矩形,以及这样的宽度和高度(在 C++ 中):

class Rectangle
{
public:
    Rectangle(float _x, float _y, float _width, float _height);
    ~Rectangle();

    float X, Y, Width, Height;

    bool intersects(Rectangle& _rect)
    {
        return (
        (X < _rect.X + _rect.Width)&&
        (X + Width > _rect.X)&&
        (Y < _rect.Y + _rect.Height)&&
        (Y + Height > _rect.Y)
        );
    }
}

上面的 intersects 函数 returns 如果矩形重叠 - 如果它们发生碰撞则为真。但是,如果我想找出 另一个矩形与矩形的哪一侧 相撞怎么办?我该怎么做(有效,但不是优先事项)?

如果检测到碰撞,则有 16 种不同的变体

我是怎么得到这个 table 的?红色矩形的左上角有 4 个不同的位置。第一行是第一个变体,第二行是第二个变体,依此类推。也有4个差异。红色矩形右下角的位置。我还将每个变体放在单独的列中。
例如,我们想知道 (*this) 的顶部(让它是红色的)是否与 _rect(让它是蓝色的)相撞。对于变体 9、10、11、12、14、16 也是如此。所以情况是
(_rect.Y < Y < _rect.Y + _rect.Height) && (X < _rect.X || X + Width > _rect.X + _rect.Width)