使用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 相关文章推荐
JavaScript入门教程(7) History历史对象
Jan 31 Javascript
javascript 打印内容方法小结
Nov 04 Javascript
jquery.validate使用攻略 第三部
Jul 01 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
Feb 23 Javascript
JQuery做的一个简单的点灯游戏分享
Jul 16 Javascript
jQuery实现折线图的方法
Feb 28 Javascript
Node.js刷新session过期时间的实现方法推荐
May 18 Javascript
jQuery实现可拖拽3D万花筒旋转特效
Jan 03 Javascript
vue的全局提示框组件实例代码
Feb 26 Javascript
Bootstrap Table列宽拖动的方法
Aug 15 Javascript
vue cli3 配置proxy代理无效的解决
Oct 30 Javascript
jQuery实现简单聊天室
Feb 08 jQuery
浅析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
PHP编码规范-php coding standard
2007/03/16 PHP
如何在PHP程序中防止盗链
2008/04/09 PHP
PHP生成HTML静态页面实例代码
2008/08/31 PHP
php实现使用正则将文本中的网址转换成链接标签
2014/12/03 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
Jquery Easyui表单组件Form使用详解(30)
2016/12/19 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
浅谈python中set使用
2016/06/30 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
Python socket处理client连接过程解析
2020/03/18 Python
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
大专毕业自我鉴定
2014/02/04 职场文书
总经理的岗位职责
2014/02/23 职场文书
初一新生军训方案
2014/05/22 职场文书
党校学习党性分析材料
2014/12/19 职场文书
预防艾滋病宣传活动总结
2015/05/09 职场文书
详解Python中下划线的5种含义
2021/07/15 Python
python开发制作好看的时钟效果
2022/05/02 Python