我在 CSharp 项目中有两个对象,它们呈现矩形。现在我想计算一个对象是否与另一个对象相交。对象不能旋转。
我有以下方法:
getX();
getY();
getWidth();
getHeight();
我在 CSharp 项目中有两个对象,它们呈现矩形。现在我想计算一个对象是否与另一个对象相交。对象不能旋转。
我有以下方法:
getX();
getY();
getWidth();
getHeight();
虽然这在技术上是另一个问题的重复,但我会提出一个比那里发布的更优雅的解决方案。
我会从边界框的角度看待它。如果边界框比高度之和短并且比宽度之和更窄,它们必须相交:
// assume we have a class with a constructor like so...
class Rect
{
...
void Rect(int top, int left, int bottom, int right) { ... }
...
}
...
private Rect GetBoundingRect(Rect r1, Rect r2)
{
int left = min(r1.getX(), r2.getX());
int right = max(r1.getX()+r1.getWidth(), r2.getX()+r2.getWidth());
int top = min(r1.getY(), r2.getY());
int bottom = max(r1.getY()+r1.getHeight(), r2.getY()+r2.getHeight());
return new Rect( top, left, bottom, right );
}
private bool CheckIfIntersect(Rect r1, Rect r2)
{
Rect bound = GetBoundingRect(r1,r2);
return (bound.getWidth() < r1.getWidth() + r2.getWidth()) &&
(bound.getHeight() < r1.getHeight() + r2.getHeight());
}