凸包问题蛮力法JAVA实现

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<Point> points;
    private static Set<Point> 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());
        }
    }
}

  

posted @ 2018-09-27 20:11  zezezeze  阅读(663)  评论(0编辑  收藏  举报