Java:绘图"随机"分

时间:2016-11-20 19:29:19

标签: java loops random drawing polygon

我试图接受这个代码我最终为绘制一颗星而工作,并且对于如何使它吸引25颗不同的恒星(例如不同的边和尖刺)感到困惑,但我不确定如何去做它确切地说。我假设我会创建一个新的随机变量int randomStars = (int)(Math.random()*25+1); // Variable for 25 Random Stars来随机生成星星,但是我很困惑从哪里拿出它。

我很感激帮助。

我的代码(使用DrawingPanel.java):

import java.awt.*;

public class StarSampler {

       public static void main(String[] args)
       {
           DrawingPanel panel = new DrawingPanel(500, 500);
           Graphics2D g = panel.getGraphics();
           g.setColor(Color.BLUE);
           panel.setBackground(new Color(250, 0, 0));

           fillStar(g, 250, 250, 150, 5, .3); // How to rotate it to start at center?
       }

       public static void fillStar(Graphics2D g, int ctrX, int ctrY, int radius, int nPoints, double spikiness)
       {
           double xDouble[] = new double[2*nPoints];
           double yDouble[] = new double[2*nPoints];

           int xPoint[] = new int[2*nPoints]; 
           int yPoint[] = new int[2*nPoints];

           nPoints = (int) (nPoints * 2);

           int randomStars = (int)(Math.random()*25+1); // Variable for 25 Random Stars

          // Would Nestest loop go here? for (randomStars++; randomStars < 25; randomStars++)
           for (int i = 0; i < nPoints; i++)
            {
                double iRadius = (i % 2 == 0) ? radius : (radius * spikiness);
                double angle = (270) + (i * 360.0) / (nPoints);

                xPoint[i] = (int) (ctrX + iRadius * Math.cos(Math.toRadians(angle)));
                yPoint[i] = (int) (ctrY + iRadius * Math.sin(Math.toRadians(angle)));
            }
                g.fillPolygon(xPoint, yPoint, nPoints); // Creates polygon
       }
}

我的输出:

Current Output

1 个答案:

答案 0 :(得分:0)

慢慢建立起来。首先集中精力定位两颗恒星,只需两颗。选择星星中心的坐标并放置它们。调整以使其正确(您的第一次尝试可能会有错误)。测试,修复,再次测试,再次修复。重复。

然后玩眩晕和其他变化使星星不相同。当且仅当经过测试和工作时,才会转移到三颗,四颗等星。随着更多的星星,你必须更加小心避免重叠。