Find the remaining vertices of a square from two given vertices - GeeksforGeeks

23 Mar, 2021
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++
Java
Python3
C#
Javascript
// C++ program for the above approach #include <cstdlib>#include <iostream>using namespace std; // Function to find the remaining// vertices of a squarevoid 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 Codeint main(){    // Given two vertices    int x1 = 1, y1 = 2;    int x2 = 3, y2 = 4;    findVertices(x1, y1, x2, y2);     return 0;}
// Java program for the above approachimport java.util.*; class GFG{ // Function to find the remaining// vertices of a squarestatic 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 Codepublic 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
# Python3 program for the above approach # Function to find the remaining# vertices of a squaredef 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 Codeif __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
// C# program for the above approachusing System;class GFG{ // Function to find the remaining// vertices of a squarestatic 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 Codepublic 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
<script> // JavaScript program for the above approach // Function to find the remaining// vertices of a squarefunction findVertices(x1, y1, x2, y2){    // Check if the x-coordinates    // are equal    if (x1 == x2) {        document.write((x1 + y2 - y1)            + ", " + y1 + "<br>");         document.write((x2 + y2 - y1)            + ", " + y2);    }     // Check if the y-coordinates    // are equal    else if (y1 == y2) {        document.write(x1 + ", "            + (y1 + x2 - x1)            + "<br>");         document.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)) {         document.write(x1 + ", " + y2            + "<br>");        document.write(x2 + ", " + y1);    }     // Otherwise    else         // Square does not exist        document.write("-1");} // Driver Code     // Given two vertices    let x1 = 1, y1 = 2;    let x2 = 3, y2 = 4;    findVertices(x1, y1, x2, y2); // This code is contributed by Surbhi Tyagi. </script>
1, 4
3, 2
Time Complexity: O(1) Auxiliary Space: O(1)
mohit kumar 29
amit143katiyar
Rajput-Ji
zack_aayush
surbhityagi15
Geometric
Mathematical
School Programming
Mathematical
Geometric
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Haversine formula to find distance between two points on a sphere
Program to find slope of a line
Equation of circle when three points on the circle are given
Program to find line passing through 2 Points
Maximum Manhattan distance between a distinct pair from N coordinates
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7