Подтвердить что ты не робот

Как найти все точки в пути в Android?

В то же время я задал вопрос, могу ли я найти пару конкретных точек в пути; однако, на этот раз я хочу знать, есть ли способ узнать все точки пути? (Я не мог найти метод, который сделал это, что является неудачным, потому что Java предоставляет способ сделать это, а не Android?)

Я прошу об этом, потому что у меня есть несколько геометрических графов, и я хочу сравнить точки, чтобы увидеть, где они пересекаются.

Я ценю любые полезные ответы

4b9b3361

Ответ 1

Если вы создали Path, это означает, что в некоторой точке вашего кода вы знаете точную точку (Geo). Почему бы вам не поставить эту точку на ArrayList или что-то подобное?

Так, например, перед выполнением:

path.lineTo(point.x, point.y);

вы можете сделать:

yourList.add(point);
path.lineTo(point.x, point.y);

И позже вы можете получить все свои очки из ArrayList. Обратите внимание, что вы можете использовать Enhanced For Loop Syntax ArrayList, которые выполняются в три раза быстрее.

Ответ 2

Вы можете использовать PathMeasure чтобы получить координаты произвольной точки на пути. Например, этот простой фрагмент (который я видел здесь) возвращает координаты точки на половине пути:

PathMeasure pm = new PathMeasure(myPath, false);
//coordinates will be here
float aCoordinates[] = {0f, 0f};

//get point from the middle
pm.getPosTan(pm.getLength() * 0.5f, aCoordinates, null);

Или этот фрагмент возвращает массив FloaPoint Этот массив включает в себя координаты 20 точек на пути:

private FloatPoint[] getPoints() {
        FloatPoint[] pointArray = new FloatPoint[20];
        PathMeasure pm = new PathMeasure(path0, false);
        float length = pm.getLength();
        float distance = 0f;
        float speed = length / 20;
        int counter = 0;
        float[] aCoordinates = new float[2];

        while ((distance < length) && (counter < 20)) {
            // get point from the path
            pm.getPosTan(distance, aCoordinates, null);
            pointArray[counter] = new FloatPoint(aCoordinates[0],
                    aCoordinates[1]);
            counter++;
            distance = distance + speed;
        }

        return pointArray;
    }

В приведенном выше фрагменте FloatPoint является классом, который инкапсулирует координаты точки:

class FloatPoint {
        float x, y;

        public FloatPoint(float x, float y) {
            this.x = x;
            this.y = y;
        }

        public float getX() {
            return x;
        }

        public float getY() {
            return y;
        }
    }

Рекомендации:
переполнение стека
Анимация изображения с помощью Path и PathMeasure - Android