给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。
一个点的坐标(x,y)由一个有两个整数的整数数组表示。
示例:
输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
输出: True
注意:
所有输入整数都在 [-10000,10000] 范围内。
一个有效的正方形有四个等长的正长和四个等角(90度角)。
输入点没有顺序。
解法:根据定义,一个四边形为正方形当且仅当它的四条边长度相等并且两条对角线的长度也相等。
代码:
class Solution {
public:
int distance(vector<int>& s,vector<int>& t)
{
int len1=(s[0]-t[0]);
int len2=(s[1]-t[1]);
return len1*len1+len2*len2;
}
bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {
vector<int> dis;
dis.push_back(distance(p1,p2));
dis.push_back(distance(p2,p3));
dis.push_back(distance(p3,p4));
dis.push_back(distance(p4,p1));
dis.push_back(distance(p1,p3));
dis.push_back(distance(p2,p4));
sort(dis.begin(),dis.end());
return dis[0]>0&&dis[0]==dis[1]&&dis[1]==dis[2]&&dis[2]==dis[3]&&dis[3]==dis[0]&&dis[4]==dis[5];
}
};