📌  相关文章
📜  具有给定点的矩形的坐标位于内部

📅  最后修改于: 2021-04-29 13:25:32             🧑  作者: Mango

给定两个具有n个元素的数组X []和Y [],其中(Xi,Yi)表示坐标系上的一个点,找到最小的矩形,以使来自给定输入的所有点都位于该矩形内,并且矩形的边必须平行到坐标轴。打印获得的矩形的所有四个坐标。
注意: n> = 4(我们至少有4个点作为输入)。

例子 :

Input : X[] = {1, 3, 0, 4},  y[] = {2, 1, 0, 2}
Output : {0, 0}, {0, 2}, {4, 2}, {4, 0}

Input : X[] = {3, 6, 1, 9, 13, 0, 4}, Y[] = {4, 2, 6, 5, 2, 3, 1}
Output : {0, 1}, {0, 6}, {13, 6}, {13, 1} 

为了找到最小的矩形,您可以采取两种基本方法:

  1. 将坐标平面的原点视为最小的矩形,然后逐步将其扩展为根据点的坐标值(如果它们不在当前矩形内)。这个概念需要一些复杂的逻辑才能找到确切的最小矩形。
  2. 一个非常简单有效的逻辑是在所有给定点之间找到最小和最大的x&y坐标,然后这些值的所有可能的四个组合得出所需矩形的四个点,分别为{Xmin,Ymin},{ Xmin,Ymax},{Xmax,Ymax},{Xmax,Ymin}。
C++
// Program to find smallest rectangle
// to conquer all points
#include 
using namespace std;
  
// function to print coordinate of smallest rectangle
void printRect(int X[], int Y[], int n)
{
    // find Xmax and Xmin
    int Xmax = *max_element(X, X + n);
    int Xmin = *min_element(X, X + n);
  
    // find Ymax and Ymin
    int Ymax = *max_element(Y, Y + n);
    int Ymin = *min_element(Y, Y + n);
  
    // print all four coordinates
    cout << "{" << Xmin << ", " << Ymin << "}" << endl;
    cout << "{" << Xmin << ", " << Ymax << "}" << endl;
    cout << "{" << Xmax << ", " << Ymax << "}" << endl;
    cout << "{" << Xmax << ", " << Ymin << "}" << endl;
}
  
// driver program
int main()
{
    int X[] = { 4, 3, 6, 1, -1, 12 };
    int Y[] = { 4, 1, 10, 3, 7, -1 };
    int n = sizeof(X) / sizeof(X[0]);
      
    printRect(X, Y, n);
      
    return 0;
}


Java
// Program to find smallest rectangle
// to conquer all points
import java.util.Arrays;
import java.util.Collections;
  
class GFG {
          
    // function to print coordinate of smallest rectangle
    static void printRect(Integer X[], Integer Y[], int n)
    {
          
        // find Xmax and Xmin
        int Xmax = Collections.max(Arrays.asList(X));
        int Xmin = Collections.min(Arrays.asList(X));
      
        // find Ymax and Ymin
        int Ymax = Collections.max(Arrays.asList(Y));
        int Ymin = Collections.min(Arrays.asList(Y));
      
        // print all four coordinates
        System.out.println("{" + Xmin + ", " + Ymin + "}");
        System.out.println("{" + Xmin + ", " + Ymax + "}");
        System.out.println("{" + Xmax + ", " + Ymax + "}");
        System.out.println("{" + Xmax + ", " + Ymin + "}");
    }
      
    //Driver code
    public static void main (String[] args)
    {
          
        Integer X[] = { 4, 3, 6, 1, -1, 12 };
        Integer Y[] = { 4, 1, 10, 3, 7, -1 };
        int n = X.length;
          
        printRect(X, Y, n);
    }
}
  
// This code is contributed by Anant Agarwal.


Python 3
# Program to find smallest rectangle
# to conquer all points
  
# function to print coordinate of smallest rectangle
def printRect(X, Y, n):
  
    # find Xmax and Xmin
    Xmax = max(X)
    Xmin = min(X)
  
    # find Ymax and Ymin
    Ymax = max(Y)
    Ymin = min(Y)
  
    # print all four coordinates
    print("{",Xmin,", ",Ymin,"}",sep="" )
    print("{",Xmin,", ",Ymax,"}",sep="" )
    print("{",Xmax,", ",Ymax,"}",sep="" )
    print("{",Xmax,", ",Ymin,"}",sep="" )
  
# driver program
X = [4, 3, 6, 1, -1, 12] 
Y =  [4, 1, 10, 3, 7, -1]
n = len(X) 
printRect(X, Y, n)
# This code is contributed by
# Smitha Dinesh Semwal


C#
// Program to find smallest rectangle
// to conquer all points
using System.Linq;
using System;
  
public class GFG{
      
    // function to print coordinate
    // of smallest rectangle
    static void printRect(int[] X, 
                        int[] Y, int n)
    {
          
        // find Xmax and Xmin
        int Xmax = X.Max();
        int Xmin = X.Min();
      
        // find Ymax and Ymin
        int Ymax = Y.Max();
        int Ymin = Y.Min();
      
        // print all four coordinates
        Console.WriteLine("{" + Xmin + ", "
                             + Ymin + "}");
                               
        Console.WriteLine("{" + Xmin + ", "
                             + Ymax + "}");
                               
        Console.WriteLine("{" + Xmax + ", "
                             + Ymax + "}");
                               
        Console.WriteLine("{" + Xmax + ", "
                             + Ymin + "}");
    }
      
    // Driver code
    static public void Main ()
    {
        int[] X = { 4, 3, 6, 1, -1, 12 };
        int[] Y = { 4, 1, 10, 3, 7, -1 };
        int n = X.Length;
          
        printRect(X, Y, n);
    }
}
  
// This code is contributed by Ajit.


PHP


输出:
{-1, -1}
{-1, 10}
{12, 10}
{12, -1}