如何让我的一些矩形呈金色(比例)?

时间:2017-04-06 04:44:56

标签: java swing

我不太确定如何制作它,所以当在屏幕上绘制一个矩形时,它有可能是金色的。这是我为游戏随机生成随机矩形的当前代码:

public void drawRectangle() {
    rects.clear();

    int x = (int) (Math.random() * getWidth());
    int y = (int) (Math.random() * getHeight());
    int width = (int) (Math.random() * (getWidth() / 4));
    int height = (int) (Math.random() * (getHeight() / 4));

    if (x + width > getWidth()) {
        x = getWidth() - width;
    }

    if (y + height > getHeight()) {
        y = getHeight() - height;
    }

    Color color = new Color(
            (int) (Math.random() * 255),
            (int) (Math.random() * 255),
            (int) (Math.random() * 255));

    rects.add(new Rect(x, y, width, height, color));

    repaint();
}

而且我尝试使用的代码使其成为黄金,虽然这是从网上获取的,我试图让它工作:编辑:下面这段代码实际上是无用的,但我会把它留在psot如果它的使用

public static double golden(int n) {
    if (n == 0) return 1;
    return 1.0 + 1.0 / golden(n-1);
}

public static void main(String[] args) {
    int n = Integer.parseInt(args[0]);
    System.out.println(golden(n));
}

非常感谢任何帮助!再次感谢一堆

1 个答案:

答案 0 :(得分:2)

基本思路是,您想要随机创建一个黄金矩形(并可能随机创建宽度或高度)

您可以使用Math.random,如果它在指定范围内(即0.75-1.0),生成一个黄金矩形,但我很懒,所以我会使用Random#nextBoolean来做出决定本身,例如......

private Random random = new Random(System.currentTimeMillis());

public void drawRectangle() {
    rects.clear();

    double x = (Math.random() * getWidth());
    double y = (Math.random() * getHeight());
    double width = 0;
    double height = 0;
    if (random.nextBoolean()) {
        if (random.nextBoolean()) {
            width = (Math.random() * (getWidth() / 4));
            height = width * 1.618;
        } else {
            height = (Math.random() * (getHeight() / 4));
            width = height * 1.618;
        }
    } else {
        width = (Math.random() * (getWidth() / 4));
        height = (Math.random() * (getHeight() / 4));
    }

    if (x + width > getWidth()) {
        x = getWidth() - width;
    }

    if (y + height > getHeight()) {
        y = getHeight() - height;
    }

    Color color = new Color(
            (int) (Math.random() * 255),
            (int) (Math.random() * 255),
            (int) (Math.random() * 255));

    rects.add(new Rect(x, y, width, height, color));

    repaint();
}

因为黄金宽度/高度的计算会产生double值,我选择使用double s,你会发现Rectangle2D.Double在这里很有用Graphics2D可以绘制Shape个对象(请参阅Graphics2D#drawGraphics2D#fill