如何生成以Java为中心的随机多边形? 我想生成一些RANDOM多边形,但我希望它或多或少地位于给定窗口坐标的中间。

如何生成以Java为中心的随机多边形? 我想生成一些RANDOM多边形,但我希望它或多或少地位于给定窗口坐标的中间。,java,polygon,Java,Polygon,这是我的代码,它生成一个随机多边形,但大多数情况下它位于窗口底部,我希望它更居中一点: private静态最终双角_MARGIN=100.0;//场角的最大偏移,以随机化多边形 专用静态双[]标准多边形(双x1、双x2、双y1、双y2){ //minX maxX minY maxY-->它是窗口的坐标 双中心x=(x1+x2)/2; 双中心=(y1+y2)/2; //这是在程序窗口中间的一个标准多边形“居中”。 返回新的双精度[]{ x1-(x2-x1)*RANDOM.nextDouble(),

这是我的代码,它生成一个随机多边形,但大多数情况下它位于窗口底部,我希望它更居中一点:

private静态最终双角_MARGIN=100.0;//场角的最大偏移,以随机化多边形
专用静态双[]标准多边形(双x1、双x2、双y1、双y2){
//minX maxX minY maxY-->它是窗口的坐标
双中心x=(x1+x2)/2;
双中心=(y1+y2)/2;
//这是在程序窗口中间的一个标准多边形“居中”。
返回新的双精度[]{
x1-(x2-x1)*RANDOM.nextDouble(),y2+(y2-y1)*RANDOM.nextDouble()*角边,
x2+(x2-x1)*RANDOM.nextDouble(),y2+(y2-y1)*RANDOM.nextDouble()*角边,
x2+(x2-x1)*RANDOM.nextDouble(),y1-(y2-y1)*RANDOM.nextDouble()*角边,
x1-(x2-x1)*RANDOM.nextDouble(),y1-(y2-y1)*RANDOM.nextDouble(),
};
/*返回新的双精度[]{
x1-RANDOM.nextDouble()*角边,y2+RANDOM.nextDouble()*角边,左上角
x2+RANDOM.nextDouble()*角边,y2+RANDOM.nextDouble()*角边,右上角
x2+RANDOM.nextDouble()*角边,y1-RANDOM.nextDouble()*角边,右下角
x1-RANDOM.nextDouble()*角距,y1-RANDOM.nextDouble()*角距,//左下角
};*/
}
注释中的代码正在工作,但现在我尝试将其居中,但只得到一些矩形/正方形。我怎样才能设法保持随机多边形形状,但稍微居中一点

[编辑] 下面是我如何绘制多边形的面积:

private void drawZone(组组、IGAME参数和游戏参数){
多边形=新多边形();
double[]points=gameParameters.dronePadDeliveryZonePolygon();
列表点列表=新的ArrayList();
对于(双点:点)点列表。添加(点);
polygon.getPoints().addAll(pointsList);
多边形。设置填充(颜色。仿古白色);
group.getChildren().add(多边形);
}```

您计算了中心,但没有在任何地方使用它。我的理解是正确的,这只是一个4边多边形,从窗口的角最多随机放置100个角

我不是100%确定你想要多边形的形状,但是试试看。从逻辑上讲,它在我的头脑中起作用,但我现在没有办法测试代码

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


}

如果看不到多边形是如何绘制的,很难说。但我会在函数中为多边形指定一个原点,并将所有顶点坐标都基于该原点。在您的例子中,您需要计算窗口的中心并定义原点。您正在随机化点到中心的距离,这将使其在窗口中看起来不居中。您需要将坐标偏移多边形的总体尺寸。查看编辑以了解我如何绘制it@Phaelaxz我计算了X和Y的中心,我不确定“随机点到中心的距离”我该怎么做呢?是的,现在我有了主意,我会继续努力的,因为它并不是我想要的,但我应该能够改变,谢谢