我给你写了一个类来做你需要的事情:
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;
}