给定 4 个点的坐标,两个矩形的左下角和右上角。任务是找到由给定的两个矩形形成的相交矩形的坐标。
例子:
Input:
rec1: bottom-left(0, 0), top-right(10, 8),
rec2: bottom-left(2, 3), top-right(7, 9)
Output: (2, 3) (7, 8) (2, 8) (7, 3)
Input:
rec1: bottom-left(0, 0), top-right(3, 3),
rec2: bottom-left(1, 1), top-right(2, 2)
Output: (1, 1) (2, 2) (1, 2) (2, 1)
方法 :
由于两个给定点是矩形的对角线。所以,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 现场工作专业课程和学生竞争性编程现场课程。