繁体   English   中英

使用1px摆动矩形绘制山脉

[英]Drawing mountains using 1px swing rectangles

我正在尝试使用1宽度矩形(类似于积分)绘制山脉背景。 我将第一个点随机化到屏幕的最左侧,将二进制数随机化并绘制第一个矩形。

如果二进制数为0,则下一个矩形将低1px。 其他更高。 等等在for循环中。

在下一个循环中,有95%的可能性方向不会改变,并且会不断上升/下降。 方向改变的机会为5%。 为此,我使用的是1到1000之间的随机数。

public Landscape(Graphics g)
    {
        Graphics2D g2d = (Graphics2D)g;

        Random rand = new Random();
        int first = rand.nextInt((800 - 200) + 1) + 200;
        g2d.fillRect(0, 800 - first, 1, first);

        int d = first % 2;

        for(int i = 1; i <= 800; i++) {
            int choose = rand.nextInt((1000 - 1) + 1) + 1;

            if(choose > 950) {
                d = -(d);
            }

            if(d == -1) {
                first += 1;                
            } else {
                first -= 1;
            }

            g2d.fillRect(i, 800 - first, 1, first);
        }
    }

在此处输入图片说明

这就是我在一半情况下得到的效果。 但是有时候我会得到这样的东西:

在此处输入图片说明

这怎么可能? 怎么了

这里:

int d = first % 2;

d为1或0。如果d分配为0,则if(d == -1) {始终为false,因此图将单调向下移动。

您正在寻找两种状态的解决方案来确定山是上升还是下降,因此请使用布尔值。 也许像这样:

boolean direction = rand.nextBoolean();

// 1 in 20 chance, same as 5 in 100, same as 50 in 1000 chance
if (rand.nextInt(20) == 0) { 
   direction = !direction;
}

if (direction) {
   // ... 
} else {
   // ...
}

我自己,我会考虑使用分形。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM