Given four points in a 2-dimensional space we need to find out whether they make a parallelogram or not.

A parallelogram has four sides. Two opposite sides are parallel and are of same lengths.

Examples:

Points = [(0, 0), (4, 0), (1, 3), (5, 3)] Above points make a parallelogram. Points = [(0, 0), (2, 0), (4, 0), (2, 2)] Above points does not make a parallelogram as first three points itself are linear.

Problems for checking square and rectangle can be read from Square checking and Rectangle checking but in this problem, we need to check for the parallelogram. The main properties of the parallelogram are that opposite sides of parallelogram are parallel and of equal length and diagonals of parallelogram bisect each other. We use the second property to solve this problem. As there are four points, we can get total 6 midpoints by considering each pair. Now for four points to make a parallelogram, 2 of the midpoints should be equal and rest of them should be different.

In below code, we have created a map, which stores pairs corresponding to each midpoint. After calculating all midpoints, we have iterated over the map and check the occurrence of each midpoint, If exactly one midpoint occurred twice and other have occurred once, then given four points make a parallelogram otherwise not.

`// C++ code to test whether four points make a ` `// parallelogram or not ` `#include <bits/stdc++.h> ` `using` `namespace` `std; `
` ` `// structure to represent a point ` `struct` `point { `
` ` `double` `x, y; `
` ` `point() { } `
` ` `point(` `double` `x, ` `double` `y) `
` ` `: x(x), y(y) { } `
` ` ` ` `// defining operator < to compare two points `
` ` `bool` `operator<(` `const` `point& other) ` `const`
` ` `{ `
` ` `if` `(x < other.x) { `
` ` `return` `true` `; `
` ` `} ` `else` `if` `(x == other.x) { `
` ` `if` `(y < other.y) { `
` ` `return` `true` `; `
` ` `} `
` ` `} `
` ` `return` `false` `; `
` ` `} `
`}; ` ` ` `// Utility method to return mid point of two points ` `point getMidPoint(point points[], ` `int` `i, ` `int` `j) `
`{ ` ` ` `return` `point((points[i].x + points[j].x) / 2.0, `
` ` `(points[i].y + points[j].y) / 2.0); `
`} ` ` ` `// method returns true if point of points array form ` `// a parallelogram ` `bool` `isParallelogram(point points[]) `
`{ ` ` ` `map<point, vector<point> > midPointMap; `
` ` ` ` `// looping over all pairs of point to store their `
` ` `// mid points `
` ` `int` `P = 4; `
` ` `for` `(` `int` `i = 0; i < P; i++) { `
` ` `for` `(` `int` `j = i + 1; j < P; j++) { `
` ` `point temp = getMidPoint(points, i, j); `
` ` ` ` `// storing point pair, corresponding to `
` ` `// the mid point `
` ` `midPointMap[temp].push_back(point(i, j)); `
` ` `} `
` ` `} `
` ` ` ` `int` `two = 0, one = 0; `
` ` ` ` `// looping over (midpoint, (corresponding pairs)) `
` ` `// map to check the occurence of each midpoint `
` ` `for` `(` `auto` `x : midPointMap) { `
` ` ` ` `// updating midpoint count which occurs twice `
` ` `if` `(x.second.size() == 2) `
` ` `two++; `
` ` ` ` `// updating midpoing count which occurs once `
` ` `else` `if` `(x.second.size() == 1) `
` ` `one++; `
` ` ` ` `// if midpoint count is more than 2, then `
` ` `// parallelogram is not possible `
` ` `else`
` ` `return` `false` `; `
` ` `} `
` ` ` ` `// for parallelogram, one mid point should come `
` ` `// twice and other mid points should come once `
` ` `if` `(two == 1 && one == 4) `
` ` `return` `true` `; `
` ` ` ` `return` `false` `; `
`} ` ` ` `// Driver code to test above methods ` `int` `main() `
`{ ` ` ` `point points[4]; `
` ` ` ` `points[0] = point(0, 0); `
` ` `points[1] = point(4, 0); `
` ` `points[2] = point(1, 3); `
` ` `points[3] = point(5, 3); `
` ` ` ` `if` `(isParallelogram(points)) `
` ` `cout << ` `"Given points form a parallelogram"` `; `
` ` `else`
` ` `cout << ` `"Given points does not form a "`
` ` `"parallelogram"` `; `
` ` `return` `0; `
`} ` |

*chevron_right*

*filter_none*

Output:

Given points form a parallelogram

This article is contributed by **Utkarsh Trivedi**. 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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

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.

## Recommended Posts:

- How to check if given four points form a square
- Find Four points such that they form a square whose sides are parallel to x and y axes
- Check if given four integers (or sides) make rectangle
- Program to check whether 4 points in a 3-D plane are Coplanar
- Check whether it is possible to join two points given on circle such that distance between them is k
- Check whether two points (x1, y1) and (x2, y2) lie on same side of a given line or not
- Check whether triangle is valid or not if three points are given
- Check whether a straight line can be formed using N co-ordinate points
- Find the Missing Point of Parallelogram
- Find all possible coordinates of parallelogram
- Program for Circumference of a Parallelogram
- Find area of parallelogram if vectors of two adjacent sides are given
- Area of a triangle inside a parallelogram
- Perimeter and Area of Varignon's Parallelogram
- Length of a Diagonal of a Parallelogram using the length of Sides and the other Diagonal
- Length of diagonal of a parallelogram using adjacent sides and angle between them
- Program to calculate area of a parallelogram
- Number of Integral Points between Two Points
- Count of obtuse angles in a circle with 'k' equidistant points between 2 given points
- Minimum number of points to be removed to get remaining points on one side of axis