1

我创建了一个 draw 方法,以便使用 java 中的 fillPolygon 和 strokePolygon 方法绘制一个正六边形。目前我一直在试图弄清楚如何获得绘制正多边形所需的六个 x 和 y 坐标。有人可以帮助我吗?这是填充多边形的结构:

Public void fillPolygon(double[] xPoints,
                        double[] yPoints,
                        int nPoints)

使用当前设置的填充涂料用给定的点填充多边形。任何数组的空值都将被忽略,并且不会绘制任何内容。此方法将受到渲染属性表中指定的任何全局通用、填充或填充规则属性的影响。

参数: xPoints - 包含多边形点的 x 坐标的数组或 null。yPoints - 包含多边形点的 y 坐标的数组或 null。nPoints - 构成多边形的点数。

4

1 回答 1

0

我给你写了一个类来做你需要的事情:

public class Coordinate {

    double x;
    double y;

    public Coordinate(double x, double y) {
        this.x = x;
        this.y = y;
    }

    private static Coordinate fromPolar(double magnitude, double angle) {
        double flippedAngle = Math.PI/2 - angle;
        return new Coordinate(magnitude * Math.cos(flippedAngle),
                magnitude * Math.sin(flippedAngle));
    }

    public static Coordinate[] regularPolygonCoordinates(int sides, double radius) {
        Coordinate[] r = new Coordinate[sides];
        for (int i = 0 ; i < sides ; i++)
            r[i] = fromPolar(radius, 2.0 * Math.PI * i / sides);
        return r;
    }

    public static void main(String[] args) {
        Coordinate[] hexagon = regularPolygonCoordinates(6, 1);
        for (Coordinate coord : hexagon) {
            System.out.printf("%f,%f\n", coord.x, coord.y);
        }
    }
}

半径为 1.0 的六边形的结果:

0.000000,1.000000
0.866025,0.500000
0.866025,-0.500000
0.000000,-1.000000
-0.866025,-0.500000
-0.866025,0.500000

您可以将此代码放入您的代码中并在每次需要坐标时调用它,或者您可以将单位六边形的上述坐标硬编码到您的代码中,然后按您希望六边形的任何半径缩放所有坐标有。

如果你想做后者,你甚至不需要这段代码。我在网上找到了这个很酷的多边形顶点计算器,它可以为您提供任何“角”的坐标。

如果您确实想直接使用此代码,您可以像这样获得两个分离的顶点数组:

double[] xPoints = new double[6];
double[] yPoints = new double[6];
for (int i = 0 ; i < 6 ; i++) {
    xPoints[i] = hexagon[i].x;
    yPoints[i] = hexagon[i].y;
}
于 2020-09-26T00:52:10.707 回答