如何在Android中找到路径中的所有积分?

时间:2011-11-01 20:55:54

标签: java android path point

一段时间后,我问了一个问题,看看我是否能在路径中找到一对特定点;但是,这次我想知道是否有办法知道路径中的所有点? (我找不到这样做的方法,这很不幸,因为Java提供了一种方法来做到这一点,而不是Android?)

我问这个的原因是因为我有多个几何图形,我想比较这些点以查看它们相交的位置。

感谢任何有用的回复

2 个答案:

答案 0 :(得分:29)

您可以使用PathMeasure获取路径上任意点的坐标。例如,这个简单的片段(我看到here)会返回路径一半的点坐标:

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
Animating an image using Path and PathMeasure – Android

答案 1 :(得分:3)

如果您创建了Path,这意味着在代码的某些位置,您就知道确切的(Geo)点。你为什么不把这一点放在ArrayList或类似的东西上?

所以例如在做之前:

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

你可以这样做:

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

之后你可以从ArrayList获得所有积分。 请注意,您可以利用执行速度提高三倍的ArrayList {{1}}。