Java commons-math Проблема формирования и извлечения вершин ConvexHull2D - PullRequest
0 голосов
/ 05 мая 2020

Я работаю над проблемой ConvexHull, и мне нужно определить вершины выпуклой оболочки. Я использую Apache commons-math - ConvexHull2D. Вот что у меня есть до сих пор

public static void main(String[] args) {

        Vector2D v1 = new Vector2D(1, 3);
        Vector2D v2 = new Vector2D(-1, 3);
        Vector2D v3 = new Vector2D(0, -2);
        Vector2D v4 = new Vector2D(-1, -3);
        Vector2D v5 = new Vector2D(-12, -13);
        Vector2D v6 = new Vector2D(-10, -30);

        Vector2D[] vertices = {v1,v2,v3,v4,v5,v6};
        double tolerance = 1;

        ConvexHull2D ch = new ConvexHull2D(vertices, tolerance);
        vertices =ch.getVertices();

        System.out.println(vertices);

    }

Но с этим кодом я вижу это исключение

Exception in thread "main" org.apache.commons.math3.exception.MathIllegalArgumentException: vertices do not form a convex hull in CCW winding
    at org.apache.commons.math3.geometry.euclidean.twod.hull.ConvexHull2D.<init>(ConvexHull2D.java:69)
    at run_ootb_templates.LongitudeLatitudeTest.main(LongitudeLatitudeTest.java:22)


Я понимаю выпуклый корпус: любые 3 точки в пространстве способен образовывать выпуклый корпус, и любая дополнительная точка, кроме этих трех, может быть размещена на этой границе выпуклой оболочки.

Любая помощь в разрешении приветствуется, а также любые образцы наборов данных, чтобы я мог это понять

1 Ответ

1 голос
/ 06 мая 2020

Документация для этой области Apache commons-math кажется не очень хорошей, но, глядя на исходный код , становится ясно, что ConvexHull2D требует, чтобы вершины уже образовали выпуклый многоугольник. . Это достигается путем проверки постоянного направления поворота при движении вдоль границы. Ваши точки не образуют выпуклый многоугольник, отсюда и исключение.

Вместо этого вы хотите использовать реализацию интерфейса ConvexHullGenerator2D , например MonotoneChain , чтобы построить ConvexHull2D методом generate(Collection<Vector2D> points).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...