¿Cómo generar un polígono aleatoria centrada en Java?

J.erome:

Quiero generar un poco de randoms polígono pero yo quiero que sea más o menos centrado en el medio de las coordenadas de la ventana dadas.

Aquí está mi código, se genera un polígono al azar, pero la mayor parte del tiempo que está en la parte inferior de la ventana y me gustaría tener un poco más centrado:

    private static final double CORNER_MARGIN = 100.0; // max offset for a corner of the field, to randomize the polygon
    private static double[] standardPolygon(double x1, double x2, double y1, double y2) {
                                        // minX      maxX         minY      maxY --> it's the coordinate of the window
        double centerX = (x1 + x2) / 2;
        double centerY = (y1 + y2) / 2;

        // this is a standard polygon "centered" in the middle of the program window
        return new double[]{
                x1 -  (x2 - x1) * RANDOM.nextDouble(),  y2 + (y2 - y1) *RANDOM.nextDouble() * CORNER_MARGIN,
                x2 +  (x2 - x1) * RANDOM.nextDouble(),  y2 + (y2 - y1) *RANDOM.nextDouble() * CORNER_MARGIN,
                x2 +  (x2 - x1) * RANDOM.nextDouble(),  y1 - (y2 - y1) *RANDOM.nextDouble() * CORNER_MARGIN,
                x1 -  (x2 - x1) * RANDOM.nextDouble(),  y1 - (y2 - y1) *RANDOM.nextDouble() * CORNER_MARGIN,
        };

        /*return new double[]{
                x1 - RANDOM.nextDouble() * CORNER_MARGIN, y2 + RANDOM.nextDouble() * CORNER_MARGIN, // up left
                x2 + RANDOM.nextDouble() * CORNER_MARGIN, y2 + RANDOM.nextDouble() * CORNER_MARGIN, // up right
                x2 + RANDOM.nextDouble() * CORNER_MARGIN, y1 - RANDOM.nextDouble() * CORNER_MARGIN, // down right
                x1 - RANDOM.nextDouble() * CORNER_MARGIN, y1 - RANDOM.nextDouble() * CORNER_MARGIN, // down left
        };*/
    }

El código en el comentario está trabajando pero ahora me trató de centrar, pero solo me dan algunos rectángulos / cuadrados. ¿Cómo puedo manejar para mantener las formas poligonales azar, sino un poco más centrado?

[EDIT] Aquí es cómo dibujo del área del polígono:

    private void drawZone(Group group, IGameParameters gameParameters) {
        Polygon polygon = new Polygon();
        double[] points = gameParameters.dronePadDeliveryZonePolygon();

        List<Double> pointsList = new ArrayList<>();
        for (double point : points) pointsList.add(point);

        polygon.getPoints().addAll(pointsList);
        polygon.setFill(Color.ANTIQUEWHITE);
        group.getChildren().add(polygon);
    }```
Phaelax con:

Que ha calculado el centro, pero no lo uso en cualquier lugar. Para que lo he entendido bien, esto sólo es un polígono de 4 lados y las esquinas colocado al azar a lo sumo 100 desde la esquina de la ventana?

No estoy 100% seguro de cómo desea que el polígono que se forma, pero le daría prueba. Lógicamente funciona en mi cabeza, pero no tengo una manera de probar el código en este momento.

private static final double CORNER_MARGIN = 100.0; 
private static double[] standardPolygon(double x1, double x2, double y1, double y2) {

    double centerX = (x1 + x2) / 2;
    double centerY = (y1 + y2) / 2;


    // Get the corner offsets
    ox1 = x1 + CORNER_MARGIN * RANDOM.nextDouble(); // top left
    oy1 = y1 + CORNER_MARGIN * RANDOM.nextDouble();

    ox2 = x2 - CORNER_MARGIN * RANDOM.nextDouble(); // top right
    oy2 = y1 + CORNER_MARGIN * RANDOM.nextDouble();

    ox3 = x1 + CORNER_MARGIN * RANDOM.nextDouble(); // bottom left
    oy3 = y2 - CORNER_MARGIN * RANDOM.nextDouble();

    ox4 = x2 - CORNER_MARGIN * RANDOM.nextDouble(); // bottom right
    oy4 = y2 - CORNER_MARGIN * RANDOM.nextDouble();


    // Calculate the center of the polygon
    double cx = (ox2 - ox1) / 2;
    double cy = (oy2 - oy1) / 2;

    // difference between window's center and polygon
    double offsetX = centerX - cx;
    double offsetY = centerY - cy;

    // offset the calculated points so the polygon's center matches the window
    ox1 += offsetX;
    oy1 += offsetY;
    ox2 += offsetX;
    oy2 += offsetY;
    ox3 += offsetX;
    oy3 += offsetY;
    ox4 += offsetX;
    oy4 += offsetY;

    // this is a standard polygon "centered" in the middle of the program window
    return new double[]{
            ox1, oy1,
            ox2, oy2,
            ox3, oy3,
            ox4, oy4
    };


}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=338326&siteId=1
Recomendado
Clasificación