package convexHull;
import java.io.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class BruteForce {
private static final String fileName = "......\data.txt";//文件路径名
private static List points;
private static Set result = new HashSet<>();
private static void init() {//从文件中读取数据并解析成Point
File file = new File(fileName);
points = new ArrayList<>();
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) {
String string = null;
while ((string = bufferedReader.readLine()) != null) {
String[] strings = string.split(" ");
Point point = new Point();
point.setX(Double.parseDouble(strings[0]));
point.setY(Double.parseDouble(strings[1]));
points.add(point);
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static boolean isCorrespond(double[] arrays) {//判断这些值是否全大于等于0 或者小于等于0
boolean positive = true;
if (arrays[0] < 0) positive = false;
for (int i = 1; i < arrays.length; i++) {
if ((arrays[i] < 0 && positive) || (arrays[i] > 0 && !positive)) {
return false;
}
}
return true;
}
private static void solve() {
int pointNum = points.size();
for (int i = 0; i < pointNum; i++) {
for (int j = 0; j < pointNum; j++) {
if (i == j) continue;
double judge[] = new double[pointNum];
for (int k = 0; k < pointNum; k++) {
Point point1 = points.get(i);
Point point2 = points.get(j);
double a = point2.getY() - point1.getY();
double b = point1.getX() - point2.getX();
double c = point1.getX() * point2.getY() - point1.getY() * point2.getX();
judge[k] = a * (points.get(k).getX()) + b * (points.get(k).getY()) - c;
}
if (isCorrespond(judge)) {
result.add(points.get(i));
result.add(points.get(j));
}
}
}
}
public static void main(String[] args) {
init();
solve();
for (Point point : result) {
System.out.println(point.getX() + " " + point.getY());
}
}
}