📜  给出两个矩形的左下角和右上角时的相交矩形

📅  最后修改于: 2021-10-23 08:16:58             🧑  作者: Mango

给定 4 个点的坐标,两个矩形的左下角和右上角。任务是找到由给定的两个矩形形成的相交矩形的坐标。

例子:

方法 :
由于两个给定点是矩形的对角线。所以,x1 < x2,y1 < y2。类似地,x3 < x4,y3 < y4。
因此,可以使用公式找到相交矩形的左下角和右上角的点。

x5 = max(x1, x3);
y5 = max(y1, y3);
x6 = min(x2, x4);
y6 = min(y2, y4);  

在没有交点的情况下,x5 和 y5 将始终分别超过 x6 和 y5。矩形的另外两个点可以通过使用简单的几何图形找到。
下面是上述方法的实现:

C++
// CPP program to find intersection
// rectangle of given two rectangles.
#include 
using namespace std;
 
// function to find intersection rectangle of given two rectangles.
void FindPoints(int x1, int y1, int x2, int y2,
                int x3, int y3, int x4, int y4)
{
    // gives bottom-left point
    // of intersection rectangle
    int x5 = max(x1, x3);
    int y5 = max(y1, y3);
 
    // gives top-right point
    // of intersection rectangle
    int x6 = min(x2, x4);
    int y6 = min(y2, y4);
 
    // no intersection
    if (x5 > x6 || y5 > y6) {
        cout << "No intersection";
        return;
    }
 
    cout << "(" << x5 << ", " << y5 << ") ";
 
    cout << "(" << x6 << ", " << y6 << ") ";
 
    // gives top-left point
    // of intersection rectangle
    int x7 = x5;
    int y7 = y6;
 
    cout << "(" << x7 << ", " << y7 << ") ";
 
    // gives bottom-right point
    // of intersection rectangle
    int x8 = x6;
    int y8 = y5;
 
    cout << "(" << x8 << ", " << y8 << ") ";
}
 
// Driver code
int main()
{
    // bottom-left and top-right
    // corners of first rectangle
    int x1 = 0, y1 = 0, x2 = 10, y2 = 8;
 
    // bottom-left and top-right
    // corners of first rectangle
    int x3 = 2, y3 = 3, x4 = 7, y4 = 9;
 
    // function call
    FindPoints(x1, y1, x2, y2, x3, y3, x4, y4);
 
    return 0;
}


Java
// Java program to find intersection
// rectangle of given two rectangles.
class GFG
{
 
// function to find intersection
// rectangle of given two rectangles.
static void FindPoints(int x1, int y1,
                       int x2, int y2,
                       int x3, int y3,
                       int x4, int y4)
{
    // gives bottom-left point
    // of intersection rectangle
    int x5 = Math.max(x1, x3);
    int y5 = Math.max(y1, y3);
 
    // gives top-right point
    // of intersection rectangle
    int x6 = Math.min(x2, x4);
    int y6 = Math.min(y2, y4);
 
    // no intersection
    if (x5 > x6 || y5 > y6)
    {
        System.out.println("No intersection");
        return;
    }
 
    System.out.print("(" + x5 + ", " +
                           y5 + ") ");
 
    System.out.print("(" + x6 + ", " +
                           y6 + ") ");
 
    // gives top-left point
    // of intersection rectangle
    int x7 = x5;
    int y7 = y6;
 
    System.out.print("(" + x7 + ", " +
                           y7 + ") ");
 
    // gives bottom-right point
    // of intersection rectangle
    int x8 = x6;
    int y8 = y5;
 
    System.out.print("(" + x8 + ", " +
                           y8 + ") ");
}
 
// Driver code
public static void main(String args[])
{
    // bottom-left and top-right
    // corners of first rectangle
    int x1 = 0, y1 = 0,
        x2 = 10, y2 = 8;
 
    // bottom-left and top-right
    // corners of first rectangle
    int x3 = 2, y3 = 3,
        x4 = 7, y4 = 9;
 
    // function call
    FindPoints(x1, y1, x2, y2,
               x3, y3, x4, y4);
}
}
 
// This code is contributed
// by Arnab Kundu


Python3
# Python 3 program to find intersection
# rectangle of given two rectangles.
 
# function to find intersection
# rectangle of given two rectangles.
def FindPoints(x1, y1, x2, y2,
               x3, y3, x4, y4):
 
    # gives bottom-left point
    # of intersection rectangle
    x5 = max(x1, x3)
    y5 = max(y1, y3)
 
    # gives top-right point
    # of intersection rectangle
    x6 = min(x2, x4)
    y6 = min(y2, y4)
 
    # no intersection
    if (x5 > x6 or y5 > y6) :
        print("No intersection")
        return
 
    print( "(", x5, ", ", y5, ") ", end = " ")
 
    print( "(", x6, ", ", y6, ") ", end = " ")
 
    # gives top-left point
    # of intersection rectangle
    x7 = x5
    y7 = y6
 
    print( "(", x7, ", ", y7, ") ", end = " ")
 
    # gives bottom-right point
    # of intersection rectangle
    x8 = x6
    y8 = y5
 
    print( "(", x8, ", ", y8, ") ")
 
# Driver code
if __name__ == "__main__":
     
    # bottom-left and top-right
    # corners of first rectangle
    x1 = 0
    y1 = 0
    x2 = 10
    y2 = 8
 
    # bottom-left and top-right
    # corners of first rectangle
    x3 = 2
    y3 = 3
    x4 = 7
    y4 = 9
 
    # function call
    FindPoints(x1, y1, x2, y2, x3, y3, x4, y4)
 
# This code is contributed
# by ChitraNayal


C#
// C# program to find intersection
// rectangle of given two rectangles.
using System;
 
class GFG
{
 
// function to find intersection
// rectangle of given two rectangles.
static void FindPoints(int x1, int y1,
                       int x2, int y2,
                       int x3, int y3,
                       int x4, int y4)
{
    // gives bottom-left point
    // of intersection rectangle
    int x5 = Math.Max(x1, x3);
    int y5 = Math.Max(y1, y3);
 
    // gives top-right point
    // of intersection rectangle
    int x6 = Math.Min(x2, x4);
    int y6 = Math.Min(y2, y4);
 
    // no intersection
    if (x5 > x6 || y5 > y6)
    {
        Console.WriteLine("No intersection");
        return;
    }
 
    Console.Write("(" + x5 + ", " +
                        y5 + ") ");
 
    Console.Write("(" + x6 + ", " +
                        y6 + ") ");
 
    // gives top-left point
    // of intersection rectangle
    int x7 = x5;
    int y7 = y6;
 
    Console.Write("(" + x7 + ", " +
                        y7 + ") ");
 
    // gives bottom-right point
    // of intersection rectangle
    int x8 = x6;
    int y8 = y5;
 
    Console.Write("(" + x8 + ", " +
                        y8 + ") ");
}
 
// Driver code
public static void Main()
{
    // bottom-left and top-right
    // corners of first rectangle
    int x1 = 0, y1 = 0,
        x2 = 10, y2 = 8;
 
    // bottom-left and top-right
    // corners of first rectangle
    int x3 = 2, y3 = 3,
        x4 = 7, y4 = 9;
 
    // function call
    FindPoints(x1, y1, x2, y2,
               x3, y3, x4, y4);
}
}
 
// This code is contributed
// by Akanksha Rai


PHP
 $x6 || $y5 > $y6)
    {
        echo "No intersection";
        return;
    }
 
    echo "(" . $x5 . ", " . $y5 . ") ";
 
    echo "(" . $x6 . ", " . $y6 . ") ";
 
    // gives top-left point
    // of intersection rectangle
    $x7 = $x5;
    $y7 = $y6;
 
    echo "(" . $x7 . ", " . $y7 . ") ";
 
    // gives bottom-right point
    // of intersection rectangle
    $x8 = $x6;
    $y8 = $y5;
 
    echo "(" . $x8 . ", " . $y8 . ") ";
}
 
// Driver code
 
// bottom-left and top-right
// corners of first rectangle
$x1 = 0; $y1 = 0; $x2 = 10; $y2 = 8;
 
// bottom-left and top-right
// corners of first rectangle
$x3 = 2; $y3 = 3; $x4 = 7; $y4 = 9;
 
// function call
FindPoints($x1, $y1, $x2, $y2,
           $x3, $y3, $x4, $y4);
 
// This code is contributed
// by Akanksha Rai
?>


Javascript


输出:
(2, 3) (7, 8) (2, 8) (7, 3)

时间复杂度: O(1)

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程