查找一个矩形是否在另一个矩形内 [C语言]

8
所以我有两个矩形,用户必须输入左下角点(x1,y1,但y1始终为0)和右上角点(x2,y2),我必须找出它们中是否有一个完全包含另一个(或它们完全相同)。
这会有点困难,因为我实际上必须编写程序,让用户可以决定他们想要创建多少个矩形,但是起初,如果我知道如何在两个矩形的情况下检查,我会很高兴。

你尝试过任何代码吗? - Himanshu
拿一张纸,在上面画出你的矩形。这能给你一些提示吗? - Jongware
@Jongware,这实际上是我在这里提问之前所做的,但是并没有帮助。假设我有一个矩形,其中一个角的坐标为(1,0),另一个角的坐标为(6,4),另一个矩形的坐标为(3,0)和(5,2)。我可以在我的图纸上看到它在另一个矩形内部,但我不知道如何计算/编码它。 - Mark
3个回答

17

以下是将内矩形的边与外矩形的边进行比较。

if Right2 < Right1 && Left2 > Left1 && Top2 > Top1 && Bottom2 < Bottom1

实现:

struct RECT
{
    double x,y, w,h;

    RECT(double a,double b,double c,double d)
    {
    x=a; y=b; w=c; h=d;
    }
};


bool contains(RECT R1, RECT R2)
{
    if (   (R2.x+R2.w) < (R1.x+R1.w)
        && (R2.x) > (R1.x)
        && (R2.y) > (R1.y)
        && (R2.y+R2.h) < (R1.y+R1.h)
        )
    {
        return true;
    }
    else
    {
        return false;
    }
}

3
应该不是这样吗?如果Right2 < Right1 && Left2 > Left1 && Top2 > Top1 && Bottom2 < Bottom1。 - Horizon1710

11

根据定义,如果内部矩形的所有点都在外部矩形内,则一个矩形在另一个矩形内。通过一些几何学知识,你可以将其简化为检查内部矩形的两个对角线是否在外部矩形内。


我认为你帮助我找到了答案,我很快会检查一下,谢谢。 - Mark
正确,但不是“根据定义”。 “内部”的定义是关于形状的所有点,而不是顶点。 对于矩形而言,这是真实的,因为容器是凸的,但这并不适用于非凸容器。 对于非凸容器,所有顶点都可以在容器中,但内部形状的一部分仍然可能在外面。 - Pedro Gimeno

2
后来总比永远不做好,是吧? 我相信这是短代码:
private bool IsInside(Rectangle outer, Rectangle inner)
{
    return outer.Contains(inner)
        && outer.Contains(Point.Add(inner.Location, inner.Size));
}

你使用哪个库来定义“矩形”? - Michael Currie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接