给出四个点,判断这四个点能否构成一个正方形。 输入: 输入的第一行包含一个整数T(T≤30)表示数据组数,每组数据只有一行,包括8个整数x1, y1, x2, y2,x3,y3,x4,y4(数据均在-1000,1000 之间)以逆时针顺序给出四个点的坐标。 输出: 每组数据输出一行,如果是正方形,则输出: YES, 否则,输出:NO。 函数接口定义: 根据测试程序的题意,对Point类进行设计: class Point { int x; int y; public Point(int x, int y) { } public int dist(Point p) { return 0; } }
时间: 2023-06-19 20:07:17 浏览: 100
以下是Java语言实现的Point类以及判断正方形的函数:
```java
import java.util.Scanner;
class Point {
int x;
int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
// 计算两点之间的距离
public int dist(Point p) {
int dx = p.x - this.x;
int dy = p.y - this.y;
return dx * dx + dy * dy;
}
}
public class Main {
// 判断是否是正方形
public static boolean isSquare(Point[] points) {
int[] distances = new int[6];
int idx = 0;
for (int i = 0; i < 4; i++) {
for (int j = i + 1; j < 4; j++) {
distances[idx++] = points[i].dist(points[j]);
}
}
// 按距离从小到大排序
int temp;
for (int i = 0; i < 5; i++) {
for (int j = i + 1; j < 6; j++) {
if (distances[i] > distances[j]) {
temp = distances[i];
distances[i] = distances[j];
distances[j] = temp;
}
}
}
// 判断是否是正方形
return distances[0] == distances[3] && distances[4] == distances[5];
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
while (t-- > 0) {
Point[] points = new Point[4];
for (int i = 0; i < 4; i++) {
int x = scanner.nextInt();
int y = scanner.nextInt();
points[i] = new Point(x, y);
}
System.out.println(isSquare(points) ? "YES" : "NO");
}
}
}
```
思路是先计算出四个点两两之间的距离,然后按照距离从小到大排序,如果最小的两个距离相等且最大的两个距离也相等,则判断为正方形。
阅读全文