【码绘】processing实现码绘
程序员文章站
2022-05-22 09:46:39
...
【码绘】processing实现码绘
————————————————
这是小黑互动媒体的第一次实验,通过processing实现动态图形的临摹与拓展
解析 待临摹的动态图形
原作呈现出太阳光芒闪耀的形式,通过三角函数的产生环绕太阳一圈的光芒,假设光芒数量为n,太阳直径为d,则每个光芒点与太阳交点的坐标分别为(d/2cos(2PI/n), d/2cos(2PI/n)),然后通过三角形triangle来呈现光芒尖尖的效果,在实现动态效果时,通过改变映入数组实现每个光芒各自不同的效果,并且应用光芒长度length和光芒的运动速度来实现光芒的长度变化,当长度到达一定的临界值时,光芒速度反向,形成循环动态的效果。
话不多说哦!上代码:
float angle;
float between;
float linelength[]=new float[30];
float speed[]=new float[30];
void setup() {
size(1200, 900);
between=PI/15;
noStroke();
for (int i=0; i<30; i++) {
linelength[i]=random(300, 450);
if (i%2==0) {
speed[i]=2;
} else {
speed[i]=-2;
}
}
}
void draw() {
background(0, 0, 0);
pushMatrix();
translate(width/2, height/2);
ellipse(0, 0, 400, 400);
fill(255, 152, 69);
for (int i=0; i<30; i++) {
triangle(150*cos(angle+between*i), 150*sin(angle+between*i), 150*cos(angle+between*(i+1)), 150*sin(angle+between*(i+1)), linelength[i]*cos((angle+between*i+angle+between*(i+1))/2), linelength[i]*sin((angle+between*i+angle+between*(i+1))/2));
if ((linelength[i]>450) ||(linelength[i]<250)) {
speed[i]=-speed[i];
}
linelength[i]=linelength[i]+speed[i];
}
popMatrix();
//saveFrame();
根据临摹再创作
在拓展作品中,通过改变每个光芒的颜色信息,实现不同色相的光芒效果,此处为了颜色信息美观,使用HSB格式的颜色信息。为了增加动态变化,为整体图案引入了一个旋转系数,让整体图案旋转起来,并且为了改进中心太阳的颜色信息过于呆板的印象,使用同心圆叠加的形式,并且通过系数分别改变每个圆的半径大小实现动态波纹的效果,增加了整体图案的动态和美感。
代码如下:
float angle;
float between;
float linelength[]=new float[30];
float speed[]=new float[30];
float angle_rotate;
float scale;
float scalespeed;
void setup() {
size(1200, 900);
colorMode(HSB, 255);
between=PI/15;
scale=1;
scalespeed=0.0001;
noStroke();
for (int i=0; i<30; i++) {
linelength[i]=random(300, 450);
if (i%2==0) {
speed[i]=2;
} else {
speed[i]=-2;
}
}
}
void draw() {
background(0, 0, 0);
pushMatrix();
translate(width/2, height/2);
angle_rotate+=0.01;
for (int i=0; i<30; i++) {
fill(255/30*i, 506, 241);
triangle(150*cos(angle+between*i), 150*sin(angle+between*i), 150*cos(angle+between*(i+1)), 150*sin(angle+between*(i+1)), linelength[i]*cos((angle+between*i+angle+between*(i+1))/2), linelength[i]*sin((angle+between*i+angle+between*(i+1))/2));
if ((linelength[i]>450) ||(linelength[i]<250)) {
speed[i]=-speed[i];
}
linelength[i]=linelength[i]+speed[i];
}
angle+=0.005;
fill(25, 216, 249, 255);
for (int i=0; i<30; i++) {
fill(25+i*6, 216, 249, 255-i*5);
ellipse(0, 0, 400-i*15*scale, 400-i*15*scale);
if ((scale>=1.5) ||(scale<=0.1) ) {
scalespeed=-scalespeed;
}
scale=scale+scalespeed;
}
popMatrix();
//saveFrame();
编程不是理工人的专利,也不是深不可测又枯燥无味的代码输入过程。这门课的学习,让我了解到编程既是一门科学,也是一门艺术,二者可以彼此很好地互相补充。我体会在计算机屏幕上画图,就如同在图形纸上作画一样,这是一种思维方式,有趣而便捷,可以让人在短时间内探索出很多想法。
上一篇: Redis集群分析(10)
下一篇: 什么?AI黑白图像能够自动上色?