#**
码绘——动态图形艺术
**(js)
图片格式
**
规律
- 实现步骤:(找规律)每一行和每一列均有六个小圆
- 将其每两行看作一个集合,则其中每四个小圆可看成一个组合
- 现将其中的小圆绘制完成,然后绘制动态圆弧,可根据小组合得知其中转动情形可分为四种
- 将其从左到右,从上到下的顺序标记为1234,绘制圆弧时,其中1和2为四分之一圆弧,3和4为四分之三圆弧,1和4转动情况相同(逆时针),2和3转动情况相同(顺时针)
- 观察可得每一行每一列第1、3、5的圆弧转动情况一样,同理可得其中每一行每一列第2、4、6的圆弧的转动情况相同
- 其中每一行每一列的第1、3、5的小圆即圆弧部分代码:
- var xc=36;
var yc=36;
for(var i=0;i<=2;i++)//控制每一行
{
fill(255,255,255);
for(var j=0;j<=2;j++)//控制每一列
{
fill(255,255,255);
ellipse(xc+i144,yc+j144,60,60);//绘制背景小圆
fill(0);
arc (xc+i144,yc+j144,60,60,PI1.5-0.0005mPI,2PI-0.0005mPI);
}//绘制动态圆弧
}
- 过循环变量m来控制,m+=50;,其中四个部分小球的转动只需改动小球和圆弧的圆心位置以及圆弧的转动角度
- ##以下为其它部分的小圆和圆弧的变化
ellipse(xc+i*144,yc+j*144,60,60); arc(xc+i*144,yc+j*144,60,60,PI*1.5-0.0005*m*PI,2*PI-0.0005*m*PI);
ellipse(xc+72+i*144,yc+j*144,60,60); arc (xc+72+i*144,yc+j*144,60,60,PI+0.0005*m*PI,1.5*PI+0.0005*m*PI);
ellipse(xc+i*144,yc+72+j*144,60,60); arc (xc+i*144,yc+72+j*144,60,60,PI*0.5+0.0005*m*PI,2*PI+0.0005*m*PI);
//注意角度尺寸变化,比前两个圆弧大ellipse(xc+72+i*144,yc+72+j*144,60,60); arc (xc+72+i*144,yc+72+j*144,60,60,PI-0.0005*m*PI,0.5*PI-0.0005*m*PI);
———————————————————————————————————————————————————————————
###拓展图形
- 在原临摹图形上做相关改动让其校园和圆弧尺寸动态变化
- 按照对角线的原则,一侧递增,一侧递减,递增的一侧ellipse(xc+i144,yc+j144,60+10t,60+10t);,
- 圆弧尺寸随之递增;递减的一侧ellipse(xc+i144,yc+72+j144,60-10t,60-10t);
- 在图片上的具体呈现为颜色视觉上的变化,以及1和4转动过程中变大的效果,2和3缩小(编号对应上图规则)
- 附相关代码:
var m=0;//圆弧动态变量
function setup() {
createCanvas(432,432);
}
function draw() {
fill(0);
rect(0,0,432,432);
var xc=36;
var yc=36;
var t=millis()/1000;//颜色变换
for(var i=0;i<=2;i++)//控制每一行
{
for(var j=0;j<=2;j++)//控制每一列
{
fill(255-20*t,255-30*t,255-50*t);
ellipse(xc+i*144,yc+j*144,60+10*t,60+10*t);//画每个小圆
fill(0);
arc (xc+i*144,yc+j*144,60+10*t,60+10*t,
PI*1.5-0.0005*m*PI,2*PI-0.0005*m*PI);//绘制圆弧
}
}
/*************/
for(var i=0;i<=2;i++)
{
for(var j=0;j<=2;j++)
{
fill(255-20*t,255-50*t,255-30*t);
ellipse(xc+72+i*144,yc+j*144,60-10*t,60-10*t);
fill(0);
arc(xc+72+i*144,yc+j*144,60-10*t,60-10*t,
PI+0.0005*m*PI,1.5*PI+0.0005*m*PI);
}
}
/*****************/
for(var i=0;i<=2;i++)
{
for(var j=0;j<=2;j++)
{
fill(255-20*t,255-50*t,255-30*t);
ellipse(xc+72+i*144,yc+j*144,60-10*t,60-10*t);
fill(0);
arc(xc+72+i*144,yc+j*144,60-10*t,60-10*t,
PI+0.0005*m*PI,1.5*PI+0.0005*m*PI);
}
}
/*******************/
for(var i=0;i<=2;i++)
{
for(var j=0;j<=2;j++)
{
fill(0);
ellipse(xc+72+i*144,yc+72+j*144,60+10*t,60+10*t);
fill(255-30*t,255-20*t,255-20*t);
arc(xc+72+i*144,yc+72+j*144,60+10*t,60+10*t,
PI-0.0005*m*PI,0.5*PI-0.0005*m*PI);
}
}
m+=50;
}
##拓展图形2
- (通过sin(t)函数增量变换来控制颜色和小圆和圆弧的大小)
- 图像变现为圆弧和小圆半径以及颜色呈现周期变换
附完整代码:
var m=0;
function setup() {
createCanvas(432,432);
}
function draw() {
fill(0);
rect(0,0,432,432);
var xc=36;
var yc=36;
var t=millis()/1000;
for(var i=0;i<=2;i++)
{
for(var j=0;j<=2;j++)
{
fill(255-200*sin(2*PI*t),
255-150*sin(2*PI*t),255-50*sin(2*PI*t));
ellipse(xc+i*144,yc+j*144,
60+20*sin(2*PI*t),60+20*sin(2*PI*t));
fill(200*sin(2*PI*t),100*sin(2*PI*t),30*sin(2*PI*t));
arc(xc+i*144,yc+j*144,
60+20*sin(2*PI*t),60+20*sin(2*PI*t),
PI*1.5-0.0005*m*PI,2*PI-0.0005*m*PI);
}
}
for(var i=0;i<=2;i++)
{
for(var j=0;j<=2;j++)
{
fill(255-200*sin(2*PI*t),
255-50*sin(2*PI*t),255-130*sin(2*PI*t));
ellipse(xc+72+i*144,yc+j*144,
60-20*cos(2*PI*t),60-20*cos(2*PI*t));
fill(200*sin(2*PI*t),100*sin(2*PI*t),30*sin(2*PI*t));
arc (xc+72+i*144,yc+j*144,
60-20*cos(2*PI*t),60-20*cos(2*PI*t),
PI+0.0005*m*PI,1.5*PI+0.0005*m*PI);
}
}
for(var i=0;i<=2;i++)
{
for(var j=0;j<=2;j++)
{
fill(255-200*sin(2*PI*t),
255-50*sin(2*PI*t),255-130*sin(2*PI*t));
ellipse(xc+72+i*144,yc+j*144,
60-20*cos(2*PI*t),60-20*cos(2*PI*t));
fill(200*sin(2*PI*t),100*sin(2*PI*t),30*sin(2*PI*t));
arc (xc+72+i*144,yc+j*144,
60-20*cos(2*PI*t),60-20*cos(2*PI*t),
PI+0.0005*m*PI,1.5*PI+0.0005*m*PI);
}
}
for(var i=0;i<=2;i++)
{
for(var j=0;j<=2;j++)
{
fill(200*sin(2*PI*t),100*sin(2*PI*t),30*sin(2*PI*t));
ellipse(xc+i*144,yc+72+j*144,
60-20*cos(2*PI*t),60-20*cos(2*PI*t));
fill(255-150*sin(2*PI*t),
255-200*sin(2*PI*t),255-20*sin(2*PI*t));
arc (xc+i*144,yc+72+j*144,
60-20*cos(2*PI*t),60-20*cos(2*PI*t),
PI*0.5+0.0005*m*PI,2*PI+0.0005*m*PI);
}
}
for(var i=0;i<=2;i++)
{
for(var j=0;j<=2;j++)
{
fill(200*sin(2*PI*t),100*sin(2*PI*t),30*sin(2*PI*t));
ellipse(xc+72+i*144,yc+72+j*144,
60+20*sin(2*PI*t),60+20*sin(2*PI*t));
fill(255-30*sin(2*PI*t),
255-200*sin(2*PI*t),255-120*t);
arc (xc+72+i*144,yc+72+j*144,
60+20*sin(2*PI*t),60+20*sin(2*PI*t),
PI-0.0005*m*PI,0.5*PI-0.0005*m*PI);
}
}
m+=50;
}