正方形
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
给出四个点,判断这四个点能否构成一个正方形。
Input
输入的第一行包含一个整数T(T≤30)表示数据组数,每组数据只有一行,包括8个整数x1, y1, x2, y2,x3,y3,x4,y4(数据均在-1000,1000 之间)以逆时针顺序给出四个点的坐标。
Output
每组数据输出一行,如果是正方形,则输出: YES, 否则,输出:NO。
Sample Input
20 0 1 0 1 1 0 1-1 0 0 -2 1 0 2 0
Sample Output
YESNO
Hint
Source
四条边是否大于0 四条边是否相等 有一个直角
import java.util.Scanner;
class Square
{
int x1,x2,x3,x4;
int y1,y2,y3,y4;
Square(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)
{
this.x1 = x1; this.x2 = x2 ; this.x3 = x3; this.x4 = x4;
this.y1 = y1; this.y2 = y2; this.y3 = y3; this.y4 = y4;
}
boolean Judge()
{
boolean flag = false;
int a = (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
int b = (x3-x2)*(x3-x2)+(y3-y2)*(y3-y2);
int c = (x4-x3)*(x4-x3)+(y4-y3)*(y4-y3);
int d = (x1-x4)*(x1-x4)+(y1-y4)*(y1-y4);
int e = (x1-x3)*(x1-x3)+(y1-y3)*(y1-y3);
int f = (x2-x4)*(x2-x4)+(y2-y4)*(y2-y4);
if(a>0&&b>0&&c>0&&d>0&&e>0)//边大于0
{
if(a==b&&a==c&&a==d&&c==d)//四条边相等
{
if(e==f)//有一个直角
flag = true;
}
}
return flag ;
}
}
public class Main
{
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
int t ,i ,j;
int []a = new int[15];
t = cin.nextInt();
for(i = 0;i<t;i++)
{
for(j = 1;j<=8;j++)
a[j] = cin.nextInt();
Square square = new Square(a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);
boolean k = square.Judge();
if(k==true) System.out.println("YES");
else System.out.println("NO");
}
cin.close();
}
}