zoukankan      html  css  js  c++  java
  • 计算几何-Minimum Area Rectangle II

    2020-02-10 21:02:13

    问题描述:

    问题求解:

    本题由于可以暴力求解,所以不是特别难,主要是用来熟悉计算几何的一些知识点的。

        public double minAreaFreeRect(int[][] points) {
            double res = 2e9;
            Map<Integer, Set<Integer>> record = new HashMap<>();
            for (int[] p : points) {
                int x = p[0];
                int y = p[1];
                if (!record.containsKey(x)) record.put(x, new HashSet<>());
                record.get(x).add(y);
            }
            int n = points.length;
            for (int i = 0; i < n; i++) {
                for (int j = i + 1; j < n; j++) {
                    for (int k = j + 1; k < n; k++) {
                        if (check(points[i], points[j], points[k]) && record.containsKey(points[j][0] + points[k][0] - points[i][0]) && record.get(points[j][0] + points[k][0] - points[i][0]).contains(points[j][1] + points[k][1] - points[i][1])) {
                            res = Math.min(res, area(points[i], points[j], points[k]));
                        }
                    }
                }
            }
            return res == 2e9 ? 0 : res;
        }
        
        private boolean check(int[] p1, int[] p2, int[] p3) {
            return (p2[0] - p1[0]) * (p3[0] - p1[0]) + (p2[1] - p1[1]) * (p3[1] - p1[1]) == 0;
        }
        
        private double area(int[] p1, int[] p2, int[] p3) {
            return Math.abs(p1[0] * p2[1] + p1[1] * p3[0] + p2[0] * p3[1] -
            p2[1] * p3[0] - p1[1] * p2[0] - p1[0] * p3[1]);
        }
    

      

  • 相关阅读:
    fiddler教程--拦截并篡改
    string
    希尔排序(缩小增量排序)
    k-选取问题
    完善版本散列表
    c++ BST继承自二叉树
    DEDECMS与DZ论坛如何整合,DEDE网站调用DZ内容
    DEDECMS如何实现定时发布文章
    DEDECMS如何设置图片上传加水印
    DEDE如何制作不同背景的列表
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/12292762.html
Copyright © 2011-2022 走看看