Java,在所需位置生成随机多边形
我需要生成随机多边形作为小行星用于我的游戏。我一直在试验,试图找出如何做到这一点,但我一直被困在寻找x和y的位置 首先,我为多边形的每个点创建一个角度和一个长度。长度取决于小行星随机生成的大小Java,在所需位置生成随机多边形,java,math,polygon,Java,Math,Polygon,我需要生成随机多边形作为小行星用于我的游戏。我一直在试验,试图找出如何做到这一点,但我一直被困在寻找x和y的位置 首先,我为多边形的每个点创建一个角度和一个长度。长度取决于小行星随机生成的大小 asteroidData = new double[10][2]; for (int i = 0; i < asteroidData.length; i++) { //angle asteroidData[i][0] = Math.random()*
asteroidData = new double[10][2];
for (int i = 0; i < asteroidData.length; i++) {
//angle
asteroidData[i][0] = Math.random()*2*Math.PI;
//length
asteroidData[i][1] = sze + Math.random()*sze/2;
}
因为g.fillPolygon需要根据角度对点进行排序,所以我这样做了
Arrays.sort(asteroidData, new Comparator<double[]>() {
@Override
public int compare(final double[] entry1, final double[] entry2) {
if (entry1[0] == entry2[0])
return 0;
if (entry1[0] > entry2[0])
return 1;
return -1;
}
});
我只是对创建最终点本身/计算点坐标的数学有点迷茫。任何帮助都将不胜感激
编辑:好的,我已经计算了更多,使用trig,我可以通过比率找到点的长度和宽度。但有人知道我应该使用哪些比率吗?另外,如何区分点位于哪个象限?假设您讨论的是简单多边形,您需要确保满足以下不变量:d=180n-2,其中d是度数,n是边数。例如,三角形有180度,因为d=1803-2=1801=180
或者,您可以使用随机x、y坐标计算k点,然后将它们连接起来,得到一个k边多边形。试图计算边长和角度似乎有点过分。假设生成的长度是到小行星原点的距离,而不是边长,那么下面应该给出入口的x,y坐标
// ...
double angle = entry[0];
double length = entry[1];
double x = Math.cos(angle) * length;
double y = Math.sin(angle) * length;
// ...