Как найти все точки в пути в Android? - PullRequest
14 голосов
/ 02 ноября 2011

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

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

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

Ответы [ 2 ]

29 голосов
/ 16 января 2013

Вы можете использовать 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 s. Этот массив включает в себя координаты 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;
        }
    }

Ссылки
StackOverflow
Анимация изображения с помощью Path и PathMeasure - Android

3 голосов
/ 02 ноября 2011

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

Так, например, перед тем как сделать:

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

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

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

А позже вы можете получить все свои очки от ArrayList.Обратите внимание, что вы можете воспользоваться расширенным синтаксисом из ArrayList, который выполняется в три раза быстрее.

...