描述
给定二维平面内的四个点,判断这四个点是否能组成正方形。坐标(x,y)为整数。
输入的整数范围为[-10000, 10000]。
样例
输入:p1=[0, 0], p2=[1, 1], p3=[1, 0], p4=[0, 1]
输出:True
说明
[0, 0], [1, 1], [1, 0], [0, 1]四个点能够组成正方形
思路
想到正方形的其中一个判定条件:四边相等且对角线相等,还是比较简单的思路,直接求出6条边长,较短的四条相等并且较长的两条相等就可以得到这个是正方形。
测试
#include<bits/stdc++.h>
#include<algorithm>
class Solution {
public:
bool validSqure(double d[][2]);
};
bool Solution::validSqure(double d[][2]) {
using namespace std;
double len[6];
int count = 0;
for (int i = 0; i < 4; i++) {
for (int j = i+1; j < 4; j++) {
len[count++] = (d[i][0] - d[j][0])*(d[i][0] - d[j][0]) + (d[i][1] - d[j][1])*(d[i][1] - d[j][1]);
}
}
stable_sort(len,len+5);
std::cout << len[0] << " " << len[3] << " " << len[4] << " " << len[5] << std::endl;
if (len[0] == len[3] && len[4] == len[5] && len[4]>len[0]) {
return true;
}
else {
return false;
}
}
int main() {
double d[4][2];
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 2; j++) {
std::cin >> d[i][j];
}
}
Solution sol;
if (sol.validSqure(d)) {
std::cout << "True" << std::endl;
}
else {
std::cout << "False" << std::endl;
}
return 0;
}