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++ 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 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;
} |
// 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 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 |
# 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 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 |
// 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 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 |
<script> // JavaScript program for the above approach // Function to find the remaining // vertices of a square function 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 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)