Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,在所需位置生成随机多边形_Java_Math_Polygon - Fatal编程技术网

Java,在所需位置生成随机多边形

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()*

我需要生成随机多边形作为小行星用于我的游戏。我一直在试验,试图找出如何做到这一点,但我一直被困在寻找x和y的位置

首先,我为多边形的每个点创建一个角度和一个长度。长度取决于小行星随机生成的大小

    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;
// ...