码绘——动态图形艺术(js)

#**

码绘——动态图形艺术

**(js)

图片格式

**

原临摹图片

规律

  1. 实现步骤:(找规律)每一行和每一列均有六个小圆
  2. 将其每两行看作一个集合,则其中每四个小圆可看成一个组合
  3. 在这里插入图片描述
  4. 现将其中的小圆绘制完成,然后绘制动态圆弧,可根据小组合得知其中转动情形可分为四种
  5. 将其从左到右,从上到下的顺序标记为1234,绘制圆弧时,其中1和2为四分之一圆弧,3和4为四分之三圆弧,1和4转动情况相同(逆时针),2和3转动情况相同(顺时针)
  6. 观察可得每一行每一列第1、3、5的圆弧转动情况一样,同理可得其中每一行每一列第2、4、6的圆弧的转动情况相同
  7. 其中每一行每一列的第1、3、5的小圆即圆弧部分代码:
  8. 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+i
    144,yc+j144,60,60);//绘制背景小圆
    fill(0);
    arc (xc+i
    144,yc+j144,60,60,PI1.5-0.0005mPI,2PI-0.0005mPI);
    }//绘制动态圆弧
    }

    在这里插入图片描述
  9. 过循环变量m来控制,m+=50;,其中四个部分小球的转动只需改动小球和圆弧的圆心位置以及圆弧的转动角度
  10. ##以下为其它部分的小圆和圆弧的变化
  11. 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);
  12. 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);
  13. 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);//注意角度尺寸变化,比前两个圆弧大
  14. 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);
    ———————————————————————————————————————————————————————————

###拓展图形
在这里插入图片描述

  1. 在原临摹图形上做相关改动让其校园和圆弧尺寸动态变化
  2. 按照对角线的原则,一侧递增,一侧递减,递增的一侧ellipse(xc+i144,yc+j144,60+10t,60+10t);
  3. 圆弧尺寸随之递增;递减的一侧ellipse(xc+i144,yc+72+j144,60-10t,60-10t);
  4. 在图片上的具体呈现为颜色视觉上的变化,以及1和4转动过程中变大的效果,2和3缩小(编号对应上图规则)
  5. 附相关代码:
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
在这里插入图片描述

在这里插入图片描述

  1. (通过sin(t)函数增量变换来控制颜色和小圆和圆弧的大小)
  2. 图像变现为圆弧和小圆半径以及颜色呈现周期变换

附完整代码:

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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值