动画彩虹
我们可以通过圆弧来绘制出漂亮的彩虹,圆弧有多种绘制方法,这里通过将圆心放到画布以外,取圆的一部分来实现。noFill()用于配置不填充图形。
1 2 3 4 5 6 7 8 9 10 11 12 |
void setup() { size(300, 300); background(#04B1CE); noFill(); } void draw() { strokeWeight(random(3, 10)); // 随机圆的边框精细 stroke(random(100, 255), random(100, 255), random(100, 255)); // 随机 RGB 颜色 float rainbow_size = random(200, 270); // 随机彩虹的尺寸 ellipse(150, 330, rainbow_size, rainbow_size); } |
上面的彩虹可以看出来颜色有些偏灰,但如果我们放开随机范围 ,又会出现黑色等奇怪的颜色。 我们知道色彩模式除 RGB,还有 CMYK, LAB, HSB,而在 Processing中通过前面的颜色拾取器我们可以看到,除了 RGB外,还支持 HSB色彩模式,可分别控制色调、饱和度和亮度,代码中可通过 colorMode()修改色彩模式,使用 HSB 修改后的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void setup() { size(300, 300); background(#04B1CE); noFill(); colorMode(HSB); } void draw() { strokeWeight(random(3, 10)); stroke(random(255), 255, 255); float rainbow_size = random(200, 270); ellipse(150, 330, rainbow_size, rainbow_size); } |
条形码
以下代码主要使用 random()来实现一个概率,比如 random(100)>50相当于掷硬币,结果一半一半:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
float x = 0; void setup() { size(400, 400); background(255); stroke(255); } void draw() { line(x, 200, x, 100); x = x + 1; if (x > width) { x = 0; } if (random(100) > 70) { if (random(100) > 50) { stroke(0); } else { stroke(255); } } } |
抽象为函数后的代码见下方,这里使用stroke(255, 0, 0)红色来查看何时调用了change_line_color()函数,为显示出红色,我们还调整了 x = x + 1在 draw()函数中的顺序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
float x = 0; void setup() { size(400, 400); background(255); stroke(255); } void draw() { line(x, 200, x, 100); if (random(100) > 70) { change_line_color(); } x = x + 1; if (x > width) { x = 0; } } void change_line_color() { stroke(255, 0, 0); line(x, 200, x, 100); // 修改线条颜色为黑或白 if (random(100) > 50) { stroke(0); } else { stroke(255); } } |
函数补充知识:
定义的函数名之前的 void 表示返回数据类型,如 Int, float 等,无返回数据则使用 void。因 Java是编译型语言,因此函数的顺序不影响最终程序的执行。