/ / Získajte zoradené vrcholy GeneralPath - java, geometria, 2d

Získajte objednané vrcholy GeneralPath - java, geometria, 2d

Ako môžem získať vrcholy objektu GeneralPath? Zdá sa, že by to malo byť možné, pretože cesta je konštruovaná z bodov (lineTo, curveTo atď.).

Snažím sa vytvoriť dvojitý [] [] bodový údaj (pole súradníc x / y).

odpovede:

5 pre odpoveď č. 1

Body môžete získať späť z PathIterator.

Nie som si istý, aké sú vaše obmedzenia, ale ak má váš tvar vždy iba jednu uzavretú podcestu a má iba priame hrany (bez kriviek), bude fungovať nasledovné:

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

Ak vaša cesta môže obsahovať krivky, môžete použiť sploštená verzia getPathIterator().


0 pre odpoveď č. 2

Pochybujem, že je to vždy možné, ak vôbec ... JavaDoc hovorí:

„Trieda GeneralPath predstavuje a geometrická cesta konštruovaná z priamky a kvadratické a kubické (Bézierove) krivky. ““

Takže ak ide o krivku, body, ktoré obsahuje, nie sú nevyhnutne súčasťou krivky.