矩形碰撞确定边
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)
假设我有一个由点(它的左上角)定义的矩形,以及这样的宽度和高度(在 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)