题目:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2214
题意:输入4个点的坐标,判断是否能组成一个正方形.
说明:求出6条边长,判断对角线相等并且4条边相等(至少三条边)
坑:4个点有相等的情况,这时不能组成一个正方形
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
double calculate(double x1,double y1,double x2,double y2){//此函数用于计算俩点的 边
double res;
res = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
return res;
}
int main(){
double ax,ay,bx,by,cx,cy,dx,dy;
while(cin >>ax>>ay>>bx>>by>>cx>>cy>>dx>>dy){
if(ax==bx&&ax==cx&&ax==dx&&ay==by&&ay==cy&&ay==dy) {//如果这四个点重合,则不能构成正方形
cout <<"No\n";
continue;
}
double bian[6];
bian[0]=calculate(ax,ay,bx,by);
bian[1]=calculate(ax,ay,cx,cy);
bian[2]=calculate(ax,ay,dx,dy);
bian[3]=calculate(bx,by,cx,cy);
bian[4]=calculate(bx,by,dx,dy);
bian[5]=calculate(cx,cy,dx,dy);
sort(bian,bian+6);
//如果对角线相等,并且,至少三条边相等(如果选俩条,可能是对边)
if(bian[4]==bian[5] && bian[0]==bian[1] &&bian[0]==bian[2])
cout << "Yes\n";
else
cout << "No\n";
}
return 0;
}