Минимальное расстояние между двумя полигонами

Я работал над реализацией алгоритма, необходимого для определения минимального расстояния между двумя выпуклыми многоугольниками P и Q, но я достиг только определения расстояния между вершинами, как я могу определить минимальное расстояние на краях многоугольников.

Что именно нужно, что нативная Java может сделать с ребрами, чтобы найти минимальное расстояние? Существуют ли прямые нативные методы Java для вычисления точек по краям и как использовать их в моем фрагменте кода ниже?

        static double solve(List<List<Integer>> p, List<List<Integer>> q) {
//        confirmPositiveArea(p);
//        confirmPositiveArea(q);
        double minLength = 100000000;
        for (List<Integer> qq : q) {
            for (List<Integer> pp : p) {
                double current = distanceBTWPoints(pp, qq);
                if (current < minLength) {
                    minLength = current;
                }
            }
        }
        System.out.println(minLength);
        return minLength;
    }

    static double distanceBTWPoints(List<Integer> p, List<Integer> q) {
        double xDiff = q.get(0) - p.get(0);
        double yDiff = q.get(1) - p.get(1);
//        if(xDiff==0 || yDiff==0)
//            return 0;
        System.out.println(+p.get(0) + "  " + q.get(0) + "  " + p.get(1) + "  " + q.get(1) + " x:" + xDiff + "  y: " + yDiff + " p: " + ((xDiff * xDiff) + (yDiff * yDiff)) + " VAl= " + Math.sqrt((xDiff * xDiff) + (yDiff * yDiff)));
//        System.out.println("p.get(0): "+p.get(0) +"  q.get(0) :"+q.get(0) +"  p.get(1):  "+p.get(1) +"  q.get(1): "+q.get(1) +" xDiff: " + xDiff + "  yDiff: " + yDiff + " plus: "+((xDiff * xDiff) + (yDiff * yDiff))+ " VAl= " + Math.sqrt((xDiff * xDiff) + (yDiff * yDiff)));

        return Math.hypot(xDiff, yDiff);
    }

public static void main(String[] args) {

    List<List<Integer>> p = new ArrayList<>();
    List<List<Integer>> q = new ArrayList<>();
    List<Integer> list1 = new ArrayList<>();
    list1.add(2);
    list1.add(1);
    p.add(list1);
    list1 = new ArrayList<>();
    list1.add(10);
    list1.add(1);
    p.add(list1);
    list1 = new ArrayList<>();
    list1.add(10);
    list1.add(5);
    p.add(list1);
    list1 = new ArrayList<>();
    list1.add(2);
    list1.add(5);
    p.add(list1);
    List<Integer> list2 = new ArrayList<>();
    list2.add(15);
    list2.add(10);
    q.add(list2);
    list2 = new ArrayList<>();
    list2.add(20);
    list2.add(10);
    q.add(list2);
    list2 = new ArrayList<>();
    list2.add(20);
    list2.add(15);
    q.add(list2);
    list2 = new ArrayList<>();
    list2.add(15);
    list2.add(15);
    q.add(list2);
    System.out.println(solve(p, q));
}

0 ответов

Другие вопросы по тегам