给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。
一个点的坐标(x,y)由一个有两个整数的整数数组表示。
示例:
输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1] 输出: True
注意:
- 所有输入整数都在 [-10000,10000] 范围内。
- 一个有效的正方形有四个等长的正长和四个等角(90度角)。
- 输入点没有顺序。
class Solution {
public:
bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {
//对角线相互垂直的矩形是正方形
// 垂直坐标公式 x1x2 + y1y2 = 0
// 平行坐标公式 x1y2 - x2y1 = 0
int re[6] ;
re[0] = (p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1]) ; // 1+1
re[1] = (p1[0]-p3[0])*(p1[0]-p3[0])+(p1[1]-p3[1])*(p1[1]-p3[1]) ; //1
re[2] = (p2[0]-p3[0])*(p2[0]-p3[0])+(p2[1]-p3[1])*(p2[1]-p3[1]) ; //1
re[3] = (p4[0]-p3[0])*(p4[0]-p3[0])+(p4[1]-p3[1])*(p4[1]-p3[1]) ; // 2
re[4] = (p1[0]-p4[0])*(p1[0]-p4[0])+(p1[1]-p4[1])*(p1[1]-p4[1]) ; //1
re[5] = (p4[0]-p2[0])*(p4[0]-p2[0])+(p4[1]-p2[1])*(p4[1]-p2[1]) ;//1
for(int i =0;i < 5 ; i++)
{
for(int j = 0; j<5-i ;j++)
{
if(re[j]>re[j+1])
{
int t;
t = re[j];
re[j] = re[j+1] ;
re[j+1] = t;
}
}
}
// for(int i = 0;i<6;i++)
// {
// std::cout<<re[i]<<endl;
// }
if(re[0]==re[1]&&re[0]==re[2]&&re[0]==re[3]&&re[4]==re[5]&&re[4]>re[0])
{
return true;
}
else
{
return false ;
}
}
};