How to check if given four points form a square

21 Jun, 2022
Given coordinates of four points in a plane, find if the four points form a square or not. 
To check for square, we need to check for following. a) All fours sides formed by points are the same. b) The angle between any two sides is 90 degree. (This condition is required as Quadrilateral also has same sides. c) Check both the diagonals have the same distance
Examples:
Input: p1 = { 20, 10 }, p2 = { 10, 20 }, p3 = { 20, 20 }, p4 = { 10, 10 }Output: YesExplanation: 
 
Input: p1 = { 20, 20 }, p2 = { 10, 20 }, p3 = { 20, 20 }, p4 = { 10, 10 }Output:  No
Approach: The idea is to pick any point and calculate its distance from the rest of the points. Let the picked point be ‘p’. To form a square, the distance of two points must be the same from ‘p’, let this distance be d. The distance from one point must be different from that d and must be equal to √2 times d. Let this point with different distance be ‘q’. 
The above condition is not good enough as the point with a different distance can be on the other side. We also need to check that q is at the same distance from 2 other points and this distance is the same as d.
Below are the implementations of the above idea. 
C++
Java
Python3
C#
Javascript
// A C++ program to check if four given points form a square or not.#include <iostream>using namespace std; // Structure of a point in 2D spacestruct Point {    int x, y;}; // A utility function to find square of distance// from point 'p' to point 'q'int distSq(Point p, Point q){    return (p.x - q.x) * (p.x - q.x) + (p.y - q.y) * (p.y - q.y);} // This function returns true if (p1, p2, p3, p4) form a// square, otherwise falsebool isSquare(Point p1, Point p2, Point p3, Point p4){    int d2 = distSq(p1, p2); // from p1 to p2    int d3 = distSq(p1, p3); // from p1 to p3    int d4 = distSq(p1, p4); // from p1 to p4     if (d2 == 0 || d3 == 0 || d4 == 0)           return false;     // If lengths if (p1, p2) and (p1, p3) are same, then    // following conditions must met to form a square.    // 1) Square of length of (p1, p4) is same as twice    // the square of (p1, p2)    // 2) Square of length of (p2, p3) is same    // as twice the square of (p2, p4)     if (d2 == d3 && 2 * d2 == d4        && 2 * distSq(p2, p4) == distSq(p2, p3)) {        return true;    }     // The below two cases are similar to above case    if (d3 == d4 && 2 * d3 == d2        && 2 * distSq(p3, p2) == distSq(p3, p4)) {        return true;    }    if (d2 == d4 && 2 * d2 == d3        && 2 * distSq(p2, p3) == distSq(p2, p4)) {        return true;    }     return false;} // Driver program to test above functionint main(){    Point p1 = { 20, 10 }, p2 = { 10, 20 },          p3 = { 20, 20 }, p4 = { 10, 10 };    isSquare(p1, p2, p3, p4) ? cout << "Yes" : cout << "No";    return 0;}
// A Java program to check if four given points form a square or not. class GFG{ // Structure of a point in 2D spacestatic class Point{    int x, y;         public Point(int x, int y)        {            this.x = x;            this.y = y;        }     }; // A utility function to find square of distance// from point 'p' to point 'q'static int distSq(Point p, Point q){    return (p.x - q.x) * (p.x - q.x) + (p.y - q.y) * (p.y - q.y);} // This function returns true if (p1, p2, p3, p4) form a// square, otherwise falsestatic boolean isSquare(Point p1, Point p2, Point p3, Point p4){    int d2 = distSq(p1, p2); // from p1 to p2    int d3 = distSq(p1, p3); // from p1 to p3    int d4 = distSq(p1, p4); // from p1 to p4     if (d2 == 0 || d3 == 0 || d4 == 0)           return false;     // If lengths if (p1, p2) and (p1, p3) are same, then    // following conditions must met to form a square.    // 1) Square of length of (p1, p4) is same as twice    // the square of (p1, p2)    // 2) Square of length of (p2, p3) is same    // as twice the square of (p2, p4)     if (d2 == d3 && 2 * d2 == d4        && 2 * distSq(p2, p4) == distSq(p2, p3))    {        return true;    }     // The below two cases are similar to above case    if (d3 == d4 && 2 * d3 == d2        && 2 * distSq(p3, p2) == distSq(p3, p4))    {        return true;    }    if (d2 == d4 && 2 * d2 == d3        && 2 * distSq(p2, p3) == distSq(p2, p4))    {        return true;    }     return false;} // Driver codepublic static void main(String[] args){    Point p1 = new Point(20, 10), p2 = new Point( 10, 20 ),        p3 = new Point(20, 20 ), p4 = new Point( 10, 10 );    System.out.println(isSquare(p1, p2, p3, p4)==true ? "Yes" : "No");}} // This code is contributed by PrinciRaj1992
# A Python3 program to check if# four given points form a square or not.class Point:         # Structure of a point in 2D space    def __init__(self, x, y):        self.x = x        self.y = y # A utility function to find square of# distance from point 'p' to point 'q'def distSq(p, q):    return (p.x - q.x) * (p.x - q.x) +\           (p.y - q.y) * (p.y - q.y) # This function returns true if (p1, p2, p3, p4)# form a square, otherwise falsedef isSquare(p1, p2, p3, p4):     d2 = distSq(p1, p2) # from p1 to p2    d3 = distSq(p1, p3) # from p1 to p3    d4 = distSq(p1, p4) # from p1 to p4     if d2 == 0 or d3 == 0 or d4 == 0:           return False     # If lengths if (p1, p2) and (p1, p3) are same, then    # following conditions must be met to form a square.    # 1) Square of length of (p1, p4) is same as twice    # the square of (p1, p2)    # 2) Square of length of (p2, p3) is same    # as twice the square of (p2, p4)     if d2 == d3 and 2 * d2 == d4 and \                    2 * distSq(p2, p4) == distSq(p2, p3):        return True     # The below two cases are similar to above case    if d3 == d4 and 2 * d3 == d2 and \                    2 * distSq(p3, p2) == distSq(p3, p4):        return True     if d2 == d4 and 2 * d2 == d3 and \                    2 * distSq(p2, p3) == distSq(p2, p4):        return True     return False # Driver Codeif __name__=="__main__":    p1 = Point(20, 10)    p2 = Point(10, 20)    p3 = Point(20, 20)    p4 = Point(10, 10)         if isSquare(p1, p2, p3, p4):        print('Yes')    else:        print('No') # This code is contributed by Mayank Chaudhary# aka chaudhary_19
// A C# program to check if four given points form a square or not.using System; class GFG{ // Structure of a point in 2D spaceclass Point{    public int x, y;     public Point(int x, int y)    {        this.x = x;        this.y = y;    }     }; // A utility function to find square of distance// from point 'p' to point 'q'static int distSq(Point p, Point q){    return (p.x - q.x) * (p.x - q.x) + (p.y - q.y) * (p.y - q.y);} // This function returns true if (p1, p2, p3, p4) form a// square, otherwise falsestatic bool isSquare(Point p1, Point p2, Point p3, Point p4){    int d2 = distSq(p1, p2); // from p1 to p2    int d3 = distSq(p1, p3); // from p1 to p3    int d4 = distSq(p1, p4); // from p1 to p4     if (d2 == 0 || d3 == 0 || d4 == 0)           return false;     // If lengths if (p1, p2) and (p1, p3) are same, then    // following conditions must met to form a square.    // 1) Square of length of (p1, p4) is same as twice    // the square of (p1, p2)    // 2) Square of length of (p2, p3) is same    // as twice the square of (p2, p4)    if (d2 == d3 && 2 * d2 == d4        && 2 * distSq(p2, p4) == distSq(p2, p3))    {        return true;    }     // The below two cases are similar to above case    if (d3 == d4 && 2 * d3 == d2        && 2 * distSq(p3, p2) == distSq(p3, p4))    {        return true;    }    if (d2 == d4 && 2 * d2 == d3        && 2 * distSq(p2, p3) == distSq(p2, p4))    {        return true;    }    return false;} // Driver codepublic static void Main(String[] args){    Point p1 = new Point(20, 10), p2 = new Point(10, 20),        p3 = new Point(20, 20), p4 = new Point(10, 10);    Console.WriteLine(isSquare(p1, p2, p3, p4) == true ? "Yes" : "No");}} // This code is contributed by 29AjayKumar
<script>// JavaScript program to check if four given points form a square or not. // A utility function to find square of distance// from point 'p' to point 'q'function distSq( p, q){    return (p.x - q.x) * (p.x - q.x) + (p.y - q.y) * (p.y - q.y);} // This function returns true if (p1, p2, p3, p4) form a// square, otherwise falsefunction isSquare(p1,  p2,  p3, p4){    let d2 = distSq(p1, p2); // from p1 to p2    let d3 = distSq(p1, p3); // from p1 to p3    let d4 = distSq(p1, p4); // from p1 to p4     if (d2 == 0 || d3 == 0 || d4 == 0)           return false;     // If lengths if (p1, p2) and (p1, p3) are same, then    // following conditions must met to form a square.    // 1) Square of length of (p1, p4) is same as twice    // the square of (p1, p2)    // 2) Square of length of (p2, p3) is same    // as twice the square of (p2, p4)     if (d2 == d3 && 2 * d2 == d4        && 2 * distSq(p2, p4) == distSq(p2, p3)) {        return true;    }     // The below two cases are similar to above case    if (d3 == d4 && 2 * d3 == d2        && 2 * distSq(p3, p2) == distSq(p3, p4)) {        return true;    }    if (d2 == d4 && 2 * d2 == d3        && 2 * distSq(p2, p3) == distSq(p2, p4)) {        return true;    }     return false;} // Driver program to test above functionlet p1 = { x:20, y:10 }let p2 = { x:10, y:20 }let p3 = { x:20, y:20 }let p4 = { x:10, y:10 }isSquare(p1, p2, p3, p4) ? document.write("Yes") : document.write("No"); // This code is contributed by rohitsingh07052.</script>
Yes
Time Complexity: O(1), all operations are being carried out in O(1) constant time.Auxiliary Space: O(1), no extra space required
Extended Problem: 
Check if four segments form a rectangle 
This article is contributed by Anuj. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
Sukanta_it
SrajanPathak
shubham_singh
princiraj1992
29AjayKumar
chaudhary_19
abhiiii
rohitsingh07052
singhh3010
Code_r
Amazon
Zoho
Geometric
Mathematical
Zoho
Amazon
Mathematical
Geometric
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program for distance between two points on earth
Closest Pair of Points using Divide and Conquer algorithm
How to check if a given point lies inside or outside a polygon?
Optimum location of point to minimize total distance
How to check if two given line segments intersect?
Program for Fibonacci numbers
Set in C++ Standard Template Library (STL)
Write a program to print all permutations of a given string
C++ Data Types
Merge two sorted arrays