题目大意
按顺时针方向给定四个点的坐标,要你判断它们所组成的四边形的形状。
解体思路
将四条边以向量的形式保存下来,根据不同形状的不同特点来判断。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <cmath>
#include <set>
#include <map>
using namespace std;
struct point
{
int x,y;
};
int main()
{
int t;
scanf("%d",&t);
for(int cas=1;cas<=t;cas++)
{
point p[5];
for(int i=0;i<4;i++)
scanf("%d%d",&p[i].x,&p[i].y);
//四条边的向量
int ax=(p[1].x-p[0].x);
int ay=(p[1].y-p[0].y);
int bx=(p[1].x-p[2].x);
int by=(p[1].y-p[2].y);
int cx=(p[3].x-p[2].x);
int cy=(p[3].y-p[2].y);
int dx=(p[3].x-p[0].x);
int dy=(p[3].y-p[0].y);
printf("Case #%d: ",cas);
if(bx*dy==by*dx&&ax*cy==ay*cx)//对边平行
{
if(ax*bx+ay*by==0)//邻边90度
{
if(ax*ax+ay*ay==bx*bx+by*by)//邻边相等
printf("Square\n");
else
printf("Rectangle\n");
}
else if(ax*ax+ay*ay==bx*bx+by*by)//邻边相等
{
printf("Diamond\n");
}
else
{
printf("Parallelogram\n");
}
}
else
{
printf("Others\n");
}
}
return 0;
}