比较方便的做法是对每个顶点做一次勾股定理,如果满足每个角都是直角,就是矩形
如果把问题改成判断四个点是否组成正方形的话,就另外判断相邻的边是否相等,若是,则为正方形
供练习传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1524
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<math.h> #include<iostream> #include<algorithm> using namespace std; double x[9],y[9]; double len[9]; double Dis(double x,double y,double x2,double y2){ return (x-x2)*(x-x2)+(y-y2)*(y-y2); } int main() { int t,i,T=0; scanf("%d",&t); while(t--){ T++;printf("Case %d: ",T); int i,j; for(i=1;i<=4;i++){ scanf("%lf%lf",&x[i],&y[i]); } int ok=0; for(i=1;i<=4;i++){ int add=0; for(j=1;j<=4;j++){ if(i==j)continue; add++; len[add]=Dis(x[i],y[i],x[j],y[j]); } sort(&len[1],&len[4]); if((len[3])==(len[1]+len[2]))ok++; } if(ok==4)printf("Yes "); else printf("No "); if(t!=0)printf(" "); } return 0; }