Java 如何在Android中找到路径中的所有点?

Java 如何在Android中找到路径中的所有点?,java,android,path,point,Java,Android,Path,Point,不久前,我问了一个问题,看看我是否能在一条路径上找到一对特定的点;但是,这次我想知道是否有一种方法可以知道路径中的所有点?(我找不到一个这样做的方法,这很不幸,因为Java提供了一种实现这一点的方法,而不是Android?) 我问这个的原因是因为我有多个几何图形,我想比较这些点,看看它们在哪里相交 如果您创建了一个路径,这意味着在代码的某个点上,您知道确切的(地理)点,我将非常感谢您提供的任何有用的回答。为什么不把这一点放在ArrayList或类似的东西上呢 例如,在执行之前: path.lin

不久前,我问了一个问题,看看我是否能在一条路径上找到一对特定的点;但是,这次我想知道是否有一种方法可以知道路径中的所有点?(我找不到一个这样做的方法,这很不幸,因为Java提供了一种实现这一点的方法,而不是Android?)

我问这个的原因是因为我有多个几何图形,我想比较这些点,看看它们在哪里相交


如果您创建了一个路径,这意味着在代码的某个点上,您知道确切的(地理)点,我将非常感谢您提供的任何有用的回答。为什么不把这一点放在
ArrayList
或类似的东西上呢

例如,在执行之前:

path.lineTo(point.x, point.y);
你可以做:

yourList.add(point);
path.lineTo(point.x, point.y);
稍后,您可以从
ArrayList
获取所有积分。
请注意,您可以利用执行速度高达三倍的
ArrayList
的优势。

您可以使用
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);
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;
    }
或者此代码段返回一个
FloaPoint
s数组。该数组包含路径上20个点的坐标:

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);
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;
    }
参考文献


如果没有其他选择,我就会这么做。我会把这个问题再留待几天,如果没有其他建议,我会接受这个作为答案。@StartingGroovy好的,请参阅我的最新帖子,以便在您最终选择此解决方案时利用性能加速。有趣的是,我不知道增强的for循环快了3倍:)谢谢你的花絮!如果您正在使用一个包含所有点的数据结构,为什么需要一个Path对象?复制这些数据违反了干燥原则。你不必知道要点。例如,如果您使用android.graphics.Paint.getTextPath获取路径,您也可以使用内置的路径,我尝试使用这个答案,但是getLength生成0.0,因此没有进入我所拥有的while循环。代码是这样的:你知道为什么它会产生0.0吗?