C ++两个矩形的交集

时间:2013-10-21 17:46:11

标签: c++ intersection rectangles

我在弄清楚程序的这一部分时遇到了问题:

  

写一个带有两个Rectangle的非成员函数intersection()    参数并返回一个包含该交集的Rectangle    二。当然,如果两个矩形不相交,它应该    返回默认的Rectangle。

到目前为止,这是我的.cpp代码:

Rectangle::Rectangle()
{
    p1.x = 0;
    p1.y = 0;
    p2.x = 0;
    p2.y = 0;
}
Rectangle::Rectangle(double x, double y, double width, double height)
{
    p1.x = x;
    p1.y = y;
    p2.x = x + width;
    p2.y = y + height;
}
double Rectangle::getArea() const
{
    return (p2.x - p1.x) * (p2.y - p1.y);
}
double Rectangle::getWidth() const
{
    return (p2.x - p1.x);
}
double Rectangle::getHeight() const
{
    return (p2.y - p1.y);
}
double Rectangle::getX() const
{
    return p1.x;
}
double Rectangle::getY() const
{
    return p1.y;
}
void Rectangle::setLocation(double x, double y)
{
    p1.x = x;
    p1.y = y;
}
void Rectangle::setSize(double width, double height)
{
    p2.x = width;
    p2.y = height;
}

Rectangle intersection(const Rectangle& rec1, const Rectangle& rec2)
{
    double ix = 0.0;
    double iy = 0.0;
    double iwidth = 0.0;
    double iheight = 0.0;

    if(rec1.getX() > rec2.getX() && rec2.getX() > (rec1.getX() + rec1.getWidth()) 
        && rec1.getY() > rec2.getY() && rec2.getY() > (rec1.getY() + rec1.getHeight()))
    {
        ix = rec2.getX();
        iy = rec2.getY();
        iwidth = rec1.getX() + rec1.getWidth();
        iheight = rec1.getY() + rec1.getHeight();
    }

我没有写“其他”部分,因为首先,这个“if语句应该检查某些情况是否正确,但不是; 我假设(0,0)在左下角,因为我已经尝试了它(0,0)在左上角并且不起作用

1 个答案:

答案 0 :(得分:3)

将矩形的交点视为2对间隔的交集:

第一对是矩形水平边的交点:

Intersection1 = (rec1.getX(), rec1.getX()+rec1.getWidth())& (rec2.getX(), rec2.getX()+rec2.getWidth())

第二对是矩形的垂直边的交点:

Intersection2 = (rec1.getY(), rec1.getY()+rec1.getHeight())& (rec2.getY(), rec2.getY()+rec2.getHeight())

如果这两个交点都不为空 - 那么你可以制作一个结果交叉矩形,其边是这些交点。

您需要做的就是正确实现间隔交叉功能。