使用p5.js临摹动态图形


Posted in Javascript onOctober 23, 2019

一、临摹

最近正在学习用代码绘图,于是按照下面的动态图形自己临摹了一幅图形

使用p5.js临摹动态图形

临摹结果
观察发现,整个图案都是由基础的正六边形组成

首先创建一个画布

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

画六边形的函数为

function polygon(x, y, radius, npoints) {//绘制正多边形函数
 let angle = TWO_PI / npoints;
 beginShape();
 for (let a = 0; a < TWO_PI; a += angle) {  
  let sx = x + sin(a) * radius;
  let sy = y + cos(a) * radius;
  vertex(sx, sy);
 }
 endShape(CLOSE);
}

x,y分别表示六边形的位置,radius表示图形的边长,npoints表示图形的边数

发现六边形一直在绕着自己的中心旋转,并未发生其他变换,因此只需要将六边形批量创建,并使它不断旋转即可。

通过循环以及平移函数画出六边形

通过translate函数不断更改六边形的中心位置,

使用p5.js临摹动态图形

通过时间函数,达到不断旋转的效果

完整代码如下

function setup() {
 createCanvas(400, 400);
}
function draw() {
 background(10,10,10);
 var t=millis()/2000;
fill(123,0,0);
   for(var j=0;j<=4;j++){
  for(var h=0;h<=4;h++){
     push();
     translate(width *(0.1+j*0.2),height*(0.17+h*0.34));
    rotate(t);
     polygon(0,0,40 ,6);    
     pop();
    }  
 }
 for(var i=0;i<=5;i++){
   for(var k=0;k<=5;k++){
   
     push();
     translate(width *i*0.2,height*k*0.34);
    rotate(t); 
      polygon(0,0,40 ,6);     
     pop();
   }
  }
  
 }

function polygon(x, y, radius, npoints) {//绘制正多边形函数
 let angle = TWO_PI / npoints;
 beginShape();
 for (let a = 0; a < TWO_PI; a += angle) {  
  let sx = x + sin(a) * radius;
  let sy = y + cos(a) * radius;
  vertex(sx, sy);
 }
 endShape(CLOSE);
}

效果图

使用p5.js临摹动态图形

图形改编

只做了微小的改变,颜色可以随机切换,且有一个由小变大的过程

使用p5.js临摹动态图形

代码如下

function setup() {
 createCanvas(400, 400);
}
function draw() {
 background(0,10,200);
var t=5*millis()/1000;

//fill(211,0,0);
   for(var j=0;j<=4;j++){
  for(var h=0;h<=4;h++){
     push();
     translate(width *(0.1+j*0.2),height*(0.17+h*0.34));
     rotate(frameCount / 22.0);
     let c2=random(100,255);
   
   fill(0,c2,0);  
    if (t<50)
    {polygon(0,0,t ,6);}
     if(t>50)
    {
     fill(255,0,0);
     polygon(0,0,50 ,6);
    }

     pop();
    }
  
 }
 for(var i=0;i<=5;i++){
   for(var k=0;k<=5;k++){
   
     push();
     translate(width *(0+i*0.2),height*(0+k*0.34));
     rotate(frameCount / 22.0);
     let c2=random(100,255);
  
   fill(0,c2,0);  
    if (t<50)
    {polygon(0,0,t ,6);}
    if(t>50)
    {
     fill(0,255,0);
      polygon(0,0,50 ,6);
     }
    
     pop();
   }
  }
  
 }

function polygon(x, y, radius, npoints) {//绘制正多边形函数
 let angle = TWO_PI / npoints;
 beginShape();
 for (let a = 0; a < TWO_PI; a += angle) {  
  let sx = x + sin(a) * radius;
  let sy = y + cos(a) * radius;
  vertex(sx, sy);
 }
 endShape(CLOSE);
}

总结

本次实验让我对代码编程有了初步的了解,逐渐学回了分析问题和解决问题,虽然目前解决的都还是很简单的问题。做的图形也不够有创意,这门课程很有意思,希望后面自己可以抽出更多的时间来进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Prototype Array对象 学习
Jul 19 Javascript
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
May 15 Javascript
js 数据类型转换总结笔记
Jan 17 Javascript
jquery统计复选框选中示例
Nov 05 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
Apr 10 Javascript
利用jquery操作Radio方法小结
Oct 20 Javascript
再次谈论Javascript中的this
Jun 23 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
Aug 29 Javascript
javascript this详细介绍
Sep 19 Javascript
js放到head中失效的原因与解决方法
Mar 07 Javascript
Angular使用Md5加密的解决方法
Sep 16 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
Dec 06 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
Oct 23 #Javascript
p5.js临摹动态图形实现方法详解
Oct 23 #Javascript
jQuery实现轮播图源码
Oct 23 #jQuery
JavaScript实现图片轮播特效
Oct 23 #Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
Oct 23 #jQuery
微信小程序实现多行文字超出部分省略号显示功能
Oct 23 #Javascript
Vue实现数据请求拦截
Oct 23 #Javascript
You might like
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
深入剖析PHP中printf()函数格式化使用
2016/05/23 PHP
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
jQuery实现定位滚动条位置
2016/08/05 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
Python中生成器和yield语句的用法详解
2015/04/17 Python
Python简单生成随机数的方法示例
2018/03/31 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
python 一维二维插值实例
2020/04/22 Python
html+css3实现的登录界面
2020/12/09 HTML / CSS
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
房贷收入证明范本
2015/06/12 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
六年级语文教学反思
2016/03/03 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
Django实现聊天机器人
2021/05/31 Python
Java 写一个简单的图书管理系统
2022/04/26 Java/Android
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers