Find the remaining vertices of a square from two given vertices

Given the coordinates of any two vertices of a square (X1, Y1) and (X2, Y2), the task is to find the coordinates of the other two vertices. If a square cannot be formed using these two vertices, print -1.

Examples:  

Input: X1 = 1, Y1 = 2, X2 = 3, Y2 = 4 
Output: (1, 4), (3, 2) 
Explanation: 
 

From the above figure the other two vertices of the square will be (1, 4) and (3, 2).



Input: X1 = -5, Y1 = 5, X2 = 5, Y2 = -5 
Output: (-5, -5), (5, 5)

Approach: The approach is based on the fact that the length of all the sides of a square are equal. If no such vertices can be obtained for which the length of all the sides become equal, then print “-1”. Follow the steps below to solve the problem:

  • The given two vertices can either be the vertices of the side of the square or the vertices of the diagonal.
  • If the x-coordinates of the given two vertices are equal then the coordinates of the other two vertices will be:

 (X1 + Y2 – Y1, Y1) and (X2 + Y2 – Y1, Y2

  • If the y-coordinates of the given two vertices are equal, then the coordinates of the other two vertices will be:

(X1, Y1 + X2 – X1) and (X2, Y2 + X2 – X1)

  • Otherwise, the given coordinates are of the diagonal of the square. Therefore, the coordinates of the other two vertices will be:

(X1, Y2) and (X2, Y1)

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program for the above approach
 
#include <cstdlib>
#include <iostream>
using namespace std;
 
// Function to find the remaining
// vertices of a square
void findVertices(int x1, int y1,
                  int x2, int y2)
{
    // Check if the x-coordinates
    // are equal
    if (x1 == x2) {
        cout << (x1 + y2 - y1)
             << ", " << y1 << endl;
 
        cout << (x2 + y2 - y1)
             << ", " << y2;
    }
 
    // Check if the y-coordinates
    // are equal
    else if (y1 == y2) {
        cout << x1 << ", "
             << (y1 + x2 - x1)
             << endl;
 
        cout << x2 << ", "
             << (y2 + x2 - x1);
    }
 
    // If the the given coordinates
    // forms a diagonal of the square
    else if (abs(x2 - x1)
             == abs(y2 - y1)) {
 
        cout << x1 << ", " << y2
             << endl;
        cout << x2 << ", " << y1;
    }
 
    // Otherwise
    else
 
        // Square does not exist
        cout << "-1";
}
 
// Driver Code
int main()
{
    // Given two vertices
    int x1 = 1, y1 = 2;
    int x2 = 3, y2 = 4;
    findVertices(x1, y1, x2, y2);
 
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program for the above approach
import java.util.*;
 
class GFG{
 
// Function to find the remaining
// vertices of a square
static void findVertices(int x1, int y1,
                         int x2, int y2)
{
     
    // Check if the x-coordinates
    // are equal
    if (x1 == x2)
    {
        System.out.print((x1 + y2 - y1) +
                        ", " + y1 + "\n");
 
        System.out.print((x2 + y2 - y1) +
                        ", " + y2);
    }
 
    // Check if the y-coordinates
    // are equal
    else if (y1 == y2)
    {
        System.out.print(x1 + ", " +
                        (y1 + x2 - x1) + "\n");
 
        System.out.print(x2 + ", " +
                        (y2 + x2 - x1));
    }
 
    // If the the given coordinates
    // forms a diagonal of the square
    else if (Math.abs(x2 - x1) ==
             Math.abs(y2 - y1))
    {
        System.out.print(x1 + ", " + y2 + "\n");
        System.out.print(x2 + ", " + y1);
    }
 
    // Otherwise
    else
 
        // Square does not exist
        System.out.print("-1");
}
 
// Driver Code
public static void main(String[] args)
{
     
    // Given two vertices
    int x1 = 1, y1 = 2;
    int x2 = 3, y2 = 4;
     
    findVertices(x1, y1, x2, y2);
}
}
 
// This code is contributed by Amit Katiyar

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program for the above approach
 
# Function to find the remaining
# vertices of a square
def findVertices(x1, y1, x2, y2):
     
    # Check if the x-coordinates
    # are equal
    if (x1 == x2):
        print((x1 + y2 - y1), ",", y1)
 
        print((x2 + y2 - y1), ",", y2)
 
    # Check if the y-coordinates
    # are equal
    elif (y1 == y2):
        print(x1, ",", (y1 + x2 - x1))
 
        print(x2, ",", (y2 + x2 - x1))
 
    # If the the given coordinates
    # forms a diagonal of the square
    elif (abs(x2 - x1) == abs(y2 - y1)):
        print(x1, ",", y2)
        print(x2, ",", y1)
 
    # Otherwise
    else:
 
        # Square does not exist
        print("-1")
 
# Driver Code
if __name__ == '__main__':
     
    # Given two vertices
    x1 = 1
    y1 = 2
    x2 = 3
    y2 = 4
     
    findVertices(x1, y1, x2, y2)
 
# This code is contributed by mohit kumar 29

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program for the above approach
using System;
class GFG{
 
// Function to find the remaining
// vertices of a square
static void findVertices(int x1, int y1,
                         int x2, int y2)
{   
  // Check if the x-coordinates
  // are equal
  if (x1 == x2)
  {
    Console.Write((x1 + y2 - y1) +
                  ", " + y1 + "\n");
 
    Console.Write((x2 + y2 - y1) +
                  ", " + y2);
  }
 
  // Check if the y-coordinates
  // are equal
  else if (y1 == y2)
  {
    Console.Write(x1 + ", " +
                  (y1 + x2 - x1) + "\n");
 
    Console.Write(x2 + ", " +
                  (y2 + x2 - x1));
  }
 
  // If the the given coordinates
  // forms a diagonal of the square
  else if (Math.Abs(x2 - x1) ==
           Math.Abs(y2 - y1))
  {
    Console.Write(x1 + ", " + y2 + "\n");
    Console.Write(x2 + ", " + y1);
  }
 
  // Otherwise
  else
 
    // Square does not exist
    Console.Write("-1");
}
 
// Driver Code
public static void Main(String[] args)
{
  // Given two vertices
  int x1 = 1, y1 = 2;
  int x2 = 3, y2 = 4;
  findVertices(x1, y1, x2, y2);
}
}
 
// This code is contributed by Rajput-Ji

chevron_right


Output

1, 4
3, 2

Time Complexity: O(1) 
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

Recommended Posts:


Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.