# How to check if given four points form a square

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 ## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

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 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++

 `// A C++ program to check if four given points form a square or not. ` `#include ` `using` `namespace` `std; ` ` `  `// Structure of a point in 2D space ` `struct` `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 false ` `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 program to test above function ` `int` `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; ` `} `

## Java

 `// A Java program to check if four given points form a square or not. ` ` `  `class` `GFG ` `{ ` ` `  `// Structure of a point in 2D space ` `static` `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 false ` `static` `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 code ` `public` `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 `

## Python3

 `# 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 false ` `def` `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 Code ` `if` `__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 `

## C#

 `// A C# program to check if four given points form a square or not. ` `using` `System; ` ` `  `class` `GFG ` `{ ` ` `  `// Structure of a point in 2D space ` `class` `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 false ` `static` `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 code ` `public` `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 `

Output:

`Yes`

Extended Problem:
Check if four segments form a rectangle