/ / Получете подредени върхове на GeneralPath - java, геометрия, 2d

Получете подредени върхове на GeneralPath - java, геометрия, 2d

Как мога да получа върховете на обект GeneralPath? Изглежда, че това трябва да е възможно, тъй като пътят е изграден от точки (lineTo, curveTo и т.н.).

Опитвам се да създам двоен [] [] от точкови данни (масив от x / y координати).

Отговори:

5 за отговор № 1

Можете да получите точките от PathIterator.

Не съм сигурен какви са вашите ограничения, но ако формата ви винаги има само един затворен подклоп и има само прави ръбове (без извивки), следното ще работи:

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");
}

Ако вашият път може да съдържа криви, можете да използвате версията на изравняване на getPathIterator().


0 за отговор № 2

Съмнявам се дали е винаги възможно, ако изобщо ... JavaDoc казва:

„Класът GeneralPath представлява a геометрична пътека, изградена от прави линии и квадратични и кубични (Безие) криви. "

Така че, ако е крива, точките, които "d съдържа", не са непременно част от кривата.