【问题标题】:Java, generate random polygons in desired locationsJava,在所需位置生成随机多边形
【发布时间】:2015-04-29 18:22:27
【问题描述】:

我需要生成随机多边形以用作我的游戏的小行星。我一直在尝试,试图弄清楚如何做到这一点,但我一直卡在寻找 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 我可以使用比率找到点的长度和宽度。但是有谁知道我应该使用哪些比率?还有,如何区分点在哪个象限?

【问题讨论】:

    标签: java math polygon


    【解决方案1】:

    假设你生成的长度是到小行星原点的距离而不是边长,那么下面应该给你一个条目的 (x,y) 坐标。

    // ...
    double angle = entry[0];
    double length = entry[1];
    double x = Math.cos(angle) * length;
    double y = Math.sin(angle) * length;
    // ...
    

    【讨论】:

      【解决方案2】:

      假设您谈论的是简单多边形,您需要确保满足以下不变量:d = 180(n-2),其中 d 是度数,n 是边数。例如,一个三角形有 180 度,因为 d = 180(3-2) = 180(1) = 180。

      或者,您可以使用随机 x,y 坐标计算 k 个点,然后将它们连接起来得到一个 k 边多边形。试图计算边长和角度似乎有点过分了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-20
        • 2011-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-15
        • 2023-04-01
        • 2022-01-18
        相关资源
        最近更新 更多