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
描述:给四个坐标,判断是否能组成一个正方形
题目的难点在于我们不知道给定的四个坐标的相对位置,在确定了位置之后我们还需判断两点连成的四条边是否相等,以及两对对角的两个点所连成的线是否相等,保证图形是一个正方形,因为四条边相等也有可能是菱形。
public class ValidSquare {
public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
int[][] p = {p1, p2, p3, p4};
//根据X坐标大小和Y轴坐标大小作比较进行排序,保证0,3、1,2是对角
Arrays.sort(p, (l1, l2) -> l1[0] == l2[0] ? l1[1] - l2[1] : l1[0] - l2[0]);
return dist(p[0], p[1]) > 0 && dist(p[0], p[1]) == dist(p[1], p[2]) && dist(p[2], p[3]) == dist(p[3], p[0])
&& dist(p[1], p[2]) == dist(p[2], p[3]) && dist(p[0],p[3]) == dist(p[1],p[2]);
}
public double dist(int[] p1, int[] p2) {
return (p2[0] - p1[0]) * (p2[0] - p1[0]) + (p2[1] - p1[1]) * (p2[1] - p1[1]);
}
}