第一到四层的旋转
第一到四层的旋转与第五层一致,修改传入参数即可。
其实RotateCubes()的内容是一致的,最后返回一个theta。但当我为theta赋值后return(如下图),产生效果发生错误 ,分配数据发生错误。第一次接触p5.js,感觉代码写得比较冗余,后续学习中优化。
以上,即完成了对原图的临摹。
拓展作品
让立方体的大小随帧数变化,90帧一循环。
随帧数增加,深粉立方体变小,浅粉立方体变大。并在一瞬间,深粉立方体和浅粉立方体大小相同,形成一个完整的爱心。
if(frameCount%200>=0&&frameCount%200<=99) //扩展作品2 { size1=frameCount%100*0.02; size2=(100-frameCount%100)*0.02; size3=frameCount%100*0.02; size4=(100-frameCount%100)*0.02; size5=frameCount%100*0.02; size6=(100-frameCount%100)*0.02; } if(frameCount%200>=100&&frameCount%200<=199) { size1=(100-frameCount%100)*0.02; size2=frameCount%100*0.02; size3=(100-frameCount%100)*0.02; size4=frameCount%100*0.02; size5=(100-frameCount%100)*0.02; size6=frameCount%100*0.02; }
体会:
三维图形比起二维图像要多一个z参数,所以在排布位置的时候难度增大,且translate()函数的参数是偏移量,又为图形绘制增加了难度。
本GIF又一难点在于运动规律不能用肉眼直接获得,需要把GIF分解到每一帧,逐帧观察。运动规律相对复杂,且每一层运动规律都不同,需要控制的变量较多。