【发布时间】:2011-12-19 20:13:06
【问题描述】:
不久前我问了一个问题,看看我是否能够在路径中找到一对特定点;但是,这次我想知道是否有办法知道路径中的所有点? (我找不到这样做的方法,这很不幸,因为 Java 提供了一种方法来做到这一点,而不是 Android?)
我问这个的原因是因为我有多个几何图形,我想比较这些点以查看它们相交的位置。
感谢任何有用的回复
【问题讨论】:
不久前我问了一个问题,看看我是否能够在路径中找到一对特定点;但是,这次我想知道是否有办法知道路径中的所有点? (我找不到这样做的方法,这很不幸,因为 Java 提供了一种方法来做到这一点,而不是 Android?)
我问这个的原因是因为我有多个几何图形,我想比较这些点以查看它们相交的位置。
感谢任何有用的回复
【问题讨论】:
您可以使用PathMeasure 获取路径上任意点的坐标。例如这个简单的 sn-p(我看到的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);
或者这个sn-p返回一个FloaPoints的数组。那个数组涉及路径上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;
}
在上面的sn-p中,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
【讨论】:
如果您创建了Path,这意味着在您的代码的某个点,您知道确切的(地理)点。为什么不将这一点放在ArrayList 或类似的地方?
例如在做之前:
path.lineTo(point.x, point.y);
你可以这样做:
yourList.add(point);
path.lineTo(point.x, point.y);
稍后您可以从ArrayList 获得所有积分。
请注意,您可以利用Enhanced For Loop Syntax 和ArrayList 的优势,它们的执行速度提高了三倍。
【讨论】: