【发布时间】:2020-03-20 12:46:47
【问题描述】:
我想生成一些随机多边形,但我希望它或多或少位于给定窗口坐标的中间。
这是我的代码,它生成一个随机多边形,但大多数时候它位于窗口的底部,我希望它更居中:
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
};*/
}
注释中的代码正在运行,但现在我尝试将其居中,但我只得到一些矩形/正方形。我怎样才能设法保持随机多边形形式但更居中?
[编辑] 这是我绘制多边形面积的方法:
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);
}```
【问题讨论】:
-
如果不看你是如何绘制多边形的,很难说清楚。但我会在函数中指定多边形的原点,并将所有顶点坐标作为相对于该原点的基础。在您的情况下,您将计算窗口的中心并定义原点。您正在随机化点到中心的距离,这将使它看起来没有在窗口中居中。您需要将坐标偏移多边形的整体尺寸。
-
查看编辑以了解我如何绘制它
-
@Phaelaxz 我计算了 X 和 Y 的中心,我不太确定“随机化点到中心的距离”我该怎么做?