第二节省赛:D:正方形

Description

在二维坐标轴内给出四个点,这四个点能否构成一个正方形。

Input

第一行包括一个整数:T(1≤T≤30),表明有T组测试数据。
下面各行有8个整数:x1,y1,x2,y2,x3,y3,x4,y4(数据均在-1000,1000之间),以逆时针顺序给出四个点的坐标。

Output

对每个样例,如果是正方形,则单独在一行内输出YES,否则,输出NO。

Sample Input

2
0 0 1 0 1 1 0 1
-1 0 0 -2 1 0 2 0
Sample Output

YES

NO


判断正方形的条件是:

四条边都相等,任意两个向量都垂直。  垂直的代码是:x1*x2+y1*y2=0,用勾股定理怎么都不对,考虑到精度的问题,做题的时候,还是找最靠谱的方式做,最好的方法,就是最接近成功的。

#include <iostream>
#include <stdio.h>
#include <math.h>
int distance(int x1,int y1,int x2,int y2)
{
   // printf("%d %d %d %d\n",x1,y1,x2,y2);
    int d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

    return d;
}
int main(void)
{
   //freopen("C.txt","r",stdin);
    int n;
    scanf("%d",&n);
    while(n--)
    {
        int x1,x2,x3,x4,y1,y2,y3,y4;
        scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
        int d1;d1=distance(x1,y1,x2,y2);
        int d2=distance(x1,y1,x3,y3);
        int d3=distance(x1,y1,x4,y4);
        int d4=distance(x2,y2,x3,y3);
        int d5=distance(x3,y3,x4,y4);
       // printf("%d %d %d %d %d\n",d1,d2,d3,d4,d5);
        if(d1==d3&&d1==d4&&d1==d5&&d3==d4&&d3==d5&&d4==d5&&(x1*x2+y1*y2==0))
            printf("YES\n");
        else
            printf("NO\n");
    }

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值