Assume I have 4 points (they are 2-dimension), which are different from each other, and I want to know whether they form a square. How to do it? (let the process be as simple as possible.)
Geometry Algorithms – How to Check if 4 Points Form a Square
algorithmsgeometrymath
Best Answer
Assuming that your square might be rotated against whatever coordinates system you have in place, you can't rely on there being any repetition of X and Y values in your four points.
What you can do is calculate the distances between each of the four points. If you find the following to be true, you have a square:
There are two points, say A and C which are distance x from each other, and two other points, say B and D which are also distance x from each other.
Each point {A, B, C, D} is an equal distance from the two points which aren't x away. i.e.: If A is x away from C, then it will be z away from both B and D.
Incidentally, the distance z will have to be SQRT((x^2)/2), but you don't need to confirm this. If conditions 1 and 2 are true then you have a square. NOTE: Some people are concerned about the inefficiency of square root. I didn't say that you should do this calculation, I just said that if you did you would get a predictable result!
The bare minimum of work that you would need to do would be to pick a point, say A and calculate the distance to each of the other three points. If you can find that A is x from one point and z from two other points, then you just need to check those two other points against each other. If they are also x from each other then you have a square. i.e.:
Since AB = AD, check BD:
Just to be sure, you need to check the other sides: BC and CD.
Since AC = BD and since AB = AD = BC = CD, this is therefore a square.
Along the way, if you find more than two distinct edge distances then the figure cannot be a square, so you can stop looking.
Working Example Implementation
I have created a working example on jsfiddle (see here). In my explanation of the algorithm, I use arbitrary points A, B, C, and D. Those arbitrary points happen to be in a certain order for the sake of walking through the example. The algorithm works even if the points are in a different order, however, the example doesn't necessarily work if those points are in a different order.
Thanks to: meshuai, Blrfl, MSalters and Bart van Ingen Schenau for useful comments to improve this answer.