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