【发布时间】:2011-04-27 11:12:33
【问题描述】:
如何获取 GeneralPath 对象的顶点?看起来这应该是可能的,因为路径是由点(lineTo、curveTo 等)构成的。
我正在尝试创建点数据的 double[][](x/y 坐标数组)。
【问题讨论】:
如何获取 GeneralPath 对象的顶点?看起来这应该是可能的,因为路径是由点(lineTo、curveTo 等)构成的。
我正在尝试创建点数据的 double[][](x/y 坐标数组)。
【问题讨论】:
您可以通过@987654321@取回积分。
我不确定你的约束是什么,但如果你的形状总是只有一个封闭的子路径并且只有直边(没有曲线),那么以下将起作用:
static double[][] getPoints(Path2D path) {
List<double[]> pointList = new ArrayList<double[]>();
double[] coords = new double[6];
int numSubPaths = 0;
for (PathIterator pi = path.getPathIterator(null);
! pi.isDone();
pi.next()) {
switch (pi.currentSegment(coords)) {
case PathIterator.SEG_MOVETO:
pointList.add(Arrays.copyOf(coords, 2));
++ numSubPaths;
break;
case PathIterator.SEG_LINETO:
pointList.add(Arrays.copyOf(coords, 2));
break;
case PathIterator.SEG_CLOSE:
if (numSubPaths > 1) {
throw new IllegalArgumentException("Path contains multiple subpaths");
}
return pointList.toArray(new double[pointList.size()][]);
default:
throw new IllegalArgumentException("Path contains curves");
}
}
throw new IllegalArgumentException("Unclosed path");
}
如果你的路径可能包含曲线,你可以使用the flattening version of getPathIterator()。
【讨论】:
我怀疑它是否总是可能的,如果有的话...... JavaDoc 说:
"GeneralPath 类表示一个 几何路径由 直线,二次和 三次(贝塞尔)曲线。”
因此,如果它是一条曲线,那么它所包含的点不一定是曲线的一部分。
【讨论】:
就我所寻找的而言,我没有找到任何答案:“如何提取区域的顶峰,或者 GeneralPath”。
我可以提取一堆片段。使用此方法,即使是三角形区域也会返回 3 个以上的线段。
while (!i.isDone()) {
float[] coords = new float[2];
int segType = i.currentSegment(coords);
if (segType != PathIterator.SEG_CLOSE) {
list.add(coords);
}
i.next();
}
return list;
【讨论】: