Geometry 求交算法

Geometry 求交算法,geometry,intersection,intersect,Geometry,Intersection,Intersect,我在CSharp项目中有两个对象,它显示矩形。现在我想计算一个物体是否与另一个物体相交。对象不能旋转 我有以下几种方法: getX(); getY(); getWidth(); getHeight(); 虽然从技术上讲,这是另一个问题的重复,但我会提出一个比贴在那里的更优雅的解决方案 我将从边界框的角度来看待它。如果边界框短于高度之和且比宽度之和更薄,则它们必须相交: // assume we have a class with a constructor like so... class R

我在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());
}
//假设我们有一个类,它的构造函数如下所示。。。
类矩形
{
...
void Rect(int-top,int-left,int-bottom,int-right){…}
...
}
...
私有Rect GetBoundingRect(Rect r1,Rect r2)
{
int left=min(r1.getX(),r2.getX());
int right=max(r1.getX()+r1.getWidth(),r2.getX()+r2.getWidth());
inttop=min(r1.getY(),r2.getY());
int bottom=max(r1.getY()+r1.getHeight(),r2.getY()+r2.getHeight());
返回新的Rect(上、左、下、右);
}
专用布尔校验接口(Rect r1、Rect r2)
{
Rect-bound=GetBoundingRect(r1,r2);
返回(bind.getWidth()
这个问题的重复:是的,我也发现了。。。但这个解决方案对我来说太复杂了…@YvanJANSSENS,因为它是伪代码,提供了彻底的解释,而不仅仅是C代码片段?