利用p5.js实现动图的临摹与拓展

互动媒体艺术的课程让我们用p5.js实现对gif的临摹,如图所示:

 

这是我最终实现的效果:

好像从肉眼来说看上去好像是一样的;

下面我们来介绍一下我们是如何实现利用p5.js实现用代码对于动图的重现

一、首先我们在ps中拾取黑色和灰色的RBG值供我们在给方块上色使用

二、然后我们再寻找其中的规律,由于一开始在用眼睛慢慢观察的时候会让眼睛十分的不舒服,然后我用ps打开这个GIF的每一帧以便更好的观察其中的规律;然后总结到如下的规律:

1、该动图大概分为一个周期的两次变化,前半个周期是在黑色背景下灰色方块的变化有一个短暂的停留,后半个周期是在灰色的背景下黑色方块的变化有一个短暂的停留。

2、方块在缩放的过程中是从左上角开始运匀速向右下角进行。

观察到大致的规律以后就要进行一些计算:

该匀速运动是一种正弦的运动其中会有一定的相位差和周期之间的变化

二、我是利用https://editor.p5js.org/的网页编程

三、最后我们附上源码:

function setup() {
  createCanvas(400, 400);
  rectMode(CENTER);
}

function draw() {
  //消去边框
  noStroke();
  
  //给方块调色
  let gray=color(220,220,210);
  let black=color(38,38,38);
 
  
  var T=2880; 
  var temp=millis()%T;
  
  //前半个周期为灰色背景,黑色方块,后半个周期相反
  if(temp<T/2){    
    drawSquare(gray,black,T,false);   
  }
  else {
      drawSquare(black,gray,T,true);    
  }  
}

function cycle(i,j,T){   //方块大小变换周期
   
    var residuetime=millis()%T-(i+j)*50;  //大于周期的剩余时间
    
    if(residuetime>=0&&residuetime<PI*200)
    {
      return (50-25*sin(residuetime/200));
       
    }
    else if((residuetime>=T/2&&residuetime<T/2+PI*200))
    {
       return (50-25*sin((residuetime-T/2)/200));
    }
    else 
      return 50;
    
  }

function drawSquare(back_clr,fill_clr,T,overturn){
  
    background(back_clr);   //底色
    fill(fill_clr);        //填充色
     for(var i=0;i<8;i++){      //循环绘制方块
        for(var j=0;j<8;j++){ 
          
          var sum =i+j;            //i+j总和
            var Dangdraw=(sum%2===1);//选择行数
          
              var size=cycle(i,j,T);//方块大小
      
              if(Dangdraw){  
                  if(!overturn){
                    rect(i*50+25,j*50+25,size,size);
                    }
              }
             else{
                if(overturn){
                      rect(i*50+25,j*50+25,size,size);
                }
              }
        }
      }
}
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值