2015-04-29 39 views
1

我需要生成随机多边形用作我的游戏小行星。我一直在试验,试图找出如何做到这一点,但我一直在寻找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; 
     } 
    }); 

我对数学只是一个小的损失为创建最终点本身/找出点的坐标。任何帮助,将不胜感激。

编辑:好吧我已经想通了一点,使用三角我可以找到使用比率的长度和点的宽度。但有谁知道我应该使用哪个比率?以及如何区分这个点在哪个象限?

回答

0

假设您生成的长度是距小行星的原点的距离,而不是侧面的长度,那么以下应该给出条目的(x,y)坐标。

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

是的,这是有效的,谢谢! – user3057800

0

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

另外,你也可以用随机的x,y坐标计算k个点,然后连接它们以得到AK侧面多边形。试图计算边长和角度似乎有点过分热心。