/** * Creates a {@link WritablePolygon2D} from a list of (x, y) coordinates, * with {@link BoundaryType#UNSPECIFIED unspecified} * {@link MaskPredicate#boundaryType() boundaries}. */ public static WritablePolygon2D polygon2D( final double[] x, final double[] y ) { return new DefaultWritablePolygon2D( x, y ); }
/** * Creates a {@link WritablePolygon2D} from a list of vertices, with * {@link BoundaryType#UNSPECIFIED unspecified} * {@link MaskPredicate#boundaryType() boundaries}. */ public static WritablePolygon2D polygon2D( final List< ? extends RealLocalizable > vertices ) { return new DefaultWritablePolygon2D( vertices ); }
return new DefaultWritablePolygon2D(L);
protected static Polygon2D getPolygon() { final List<RealPoint> vertices = new ArrayList<>(); try { Files.lines(Paths.get(AbstractFeatureTest.class.getResource("2d_geometric_features_polygon.txt").toURI())) .forEach(l -> { String[] coord = l.split(" "); RealPoint v = new RealPoint(new double[]{ Double.parseDouble(coord[0]), Double.parseDouble(coord[1])}); vertices.add(v); }); } catch (IOException | URISyntaxException exc) { exc.printStackTrace(); } return new DefaultWritablePolygon2D(vertices); }
@Override public Polygon2D calculate(final Polygon2D input) { double min_x = Double.POSITIVE_INFINITY; double max_x = Double.NEGATIVE_INFINITY; double min_y = Double.POSITIVE_INFINITY; double max_y = Double.NEGATIVE_INFINITY; for (final RealLocalizable rl : GeomUtils.vertices(input)) { if (rl.getDoublePosition(0) < min_x) { min_x = rl.getDoublePosition(0); } if (rl.getDoublePosition(0) > max_x) { max_x = rl.getDoublePosition(0); } if (rl.getDoublePosition(1) < min_y) { min_y = rl.getDoublePosition(1); } if (rl.getDoublePosition(1) > max_y) { max_y = rl.getDoublePosition(1); } } final List<RealLocalizable> bounds = new ArrayList<>(); bounds.add(new RealPoint(min_x, min_y)); bounds.add(new RealPoint(min_x, max_y)); bounds.add(new RealPoint(max_x, max_y)); bounds.add(new RealPoint(max_x, min_y)); return new DefaultWritablePolygon2D(bounds); }
/** * Rotates the given Polygon2D consisting of a list of RealPoints by the * given angle about the given center. * * @param inPoly A Polygon2D consisting of a list of RealPoint RealPoints * @param angle the rotation angle * @param center the rotation center * @return a rotated polygon */ private Polygon2D rotate(final Polygon2D inPoly, final double angle, final RealLocalizable center) { List<RealLocalizable> out = new ArrayList<>(); for (RealLocalizable RealPoint : GeomUtils.vertices(inPoly)) { // double angleInRadians = Math.toRadians(angleInDegrees); double cosTheta = Math.cos(angle); double sinTheta = Math.sin(angle); double x = cosTheta * (RealPoint.getDoublePosition(0) - center .getDoublePosition(0)) - sinTheta * (RealPoint.getDoublePosition(1) - center.getDoublePosition(1)) + center.getDoublePosition(0); double y = sinTheta * (RealPoint.getDoublePosition(0) - center .getDoublePosition(0)) + cosTheta * (RealPoint.getDoublePosition(1) - center.getDoublePosition(1)) + center.getDoublePosition(1); out.add(new RealPoint(x, y)); } return new DefaultWritablePolygon2D(out); }
return new DefaultWritablePolygon2D(p);