Java GUI使用随机数绘制树

Java GUI draw tree using random number

如何使用'random number'使这棵树的角度和深度随机?

在下面的代码中使用了 JFrame。问题背后的意图是获得在 paint 方法中传递的随机化角度和深度的想法。

public class DrawTreeFrame extends JFrame {
    
    public DrawTreeFrame() {
        setSize(800, 700);
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
    
    private void drawTree(Graphics g, int x1, int y1, double angle, int depth) {
        if(depth==0)
            return;
        int x2 = x1 + (int) (Math.cos(Math.toRadians(angle)) * depth * 10.0);
        int y2 = y1 + (int) (Math.sin(Math.toRadians(angle)) * depth * 10.0);
        g.drawLine(x1, y1, x2, y2);
        drawTree(g, x2, y2, angle-20, depth-1);
        drawTree(g, x2, y2, angle+20, depth-1);
    }
    
    @Override
    public void paint(Graphics g) {
        g.setColor(Color.BLACK);
        drawTree(g, 400, 600, -90, 10);
    }

    public static void main(String[] args) {
        new DrawTreeFrame();

    }

}

您可以使用 Math.random()。下面的代码方法会给你一个范围内的随机数;

public int getRandomNumber(int min, int max) {
    return (int) ((Math.random() * (max - min)) + min);
}

最终您的代码应该如下所示:-

class DrawTreeFrame extends JFrame {
    
    public DrawTreeFrame() {
        setSize(800, 700);
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
    
    private void drawTree(Graphics g, int x1, int y1, double angle, int depth) {
        if(depth==0)
            return;
        int x2 = x1 + (int) (Math.cos(Math.toRadians(angle)) * depth * 10.0);
        int y2 = y1 + (int) (Math.sin(Math.toRadians(angle)) * depth * 10.0);
        g.drawLine(x1, y1, x2, y2);
        drawTree(g, x2, y2, angle-20, depth-1);
        drawTree(g, x2, y2, angle+20, depth-1);
    }
    
    @Override
    public void paint(Graphics g) {
        g.setColor(Color.BLACK);
        int x1 = getRandomNumber(100, 400);
        int y1 = getRandomNumber(400, 800);
        double angle = getRandomNumber(-10, -100);
        int depth = getRandomNumber(5, 20);
        drawTree(g, x1, y1, angle, depth);
    }

    public int getRandomNumber(int min, int max) {
        return (int) ((Math.random() * (max - min)) + min);
    }
    
    public static void main(String[] args) {
        new DrawTreeFrame();

    }

}