Given the coordinates of four points in 2D space, return whether the four points could construct a square.
The coordinate (x,y) of a point is represented by an integer array with two integers.
Example:
Input: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
Output: True
Note:
All the input integers are in the range [-10000, 10000].
A valid square has four equal sides with positive length and four equal angles (90-degree angles).
Input points have no order.
class Solution {
public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
int[] a = helper(p1, p2, p3, p4);
int[] b = helper(p2, p1, p3, p4);
int[] c = helper(p3, p2, p1, p4);
return check(a, b) && check(a, c);
}
private int[] helper(int[] p, int[] p1, int[] p2, int[] p3) {
int[] re = new int[3];
re[0] = (p[0] - p1[0]) * (p[0] - p1[0]) + (p[1] - p1[1]) * (p[1] - p1[1]);
re[1] = (p[0] - p2[0]) * (p[0] - p2[0]) + (p[1] - p2[1]) * (p[1] - p2[1]);
re[2] = (p[0] - p3[0]) * (p[0] - p3[0]) + (p[1] - p3[1]) * (p[1] - p3[1]);
Arrays.sort(re);
return re;
}
private boolean check(int[] a, int[] b) {
boolean flag = true;
for (int i = 0; i < 3; ++i) {
if (a[i] != b[i]) {
flag = false;
break;
}
}
return flag && a[0] + a[1] == a[2] && a[0] == a[1] && a[2] != 0;
}
}