如何判断四个点能否组成一个正方形
思路:四个点里首先任选其中三个要能组成等腰直角三角形,然后剩下的一个点与直角顶点的中点与斜边的中点重合
代码:
public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
long l12 = (long) (p1[0] - p2[0]) * (p1[0] - p2[0]) + (long) (p1[1] - p2[1]) * (p1[1] - p2[1]);
long l13 = (long) (p1[0] - p3[0]) * (p1[0] - p3[0]) + (long) (p1[1] - p3[1]) * (p1[1] - p3[1]);
long l23 = (long) (p3[0] - p2[0]) * (p3[0] - p2[0]) + (long) (p3[1] - p2[1]) * (p3[1] - p2[1]);
return validEdge(l12, l13, l23, p1, p2, p3, p4)
|| validEdge(l12, l23, l13, p2, p1, p3, p4)
|| validEdge(l13, l23, l12, p3, p1, p2, p4);
}
public boolean validEdge(long a, long b, long c, int[] p1, int[] p2, int[] p3, int[] p4) {
if (a * b * c == 0) {
return false;
}
if (a == b && a + b == c) {
return p1[0] + p4[0] == p2[0] + p3[0] && p1[1] + p4[1] == p2[1] + p3[1];
}
return false;
}

浙公网安备 33010602011771号