使用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 相关文章推荐
jQuery EasyUI API 中文文档 搜索框
Sep 29 Javascript
javascript学习笔记(七)Ajax和Http状态码
Oct 08 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
Aug 10 Javascript
跟我学习javascript的基本类型和引用类型
Nov 16 Javascript
第一次接触神奇的Bootstrap表单
Jul 27 Javascript
AngularJS封装指令方法详解
Dec 12 Javascript
Angular.js基础学习之初始化
Mar 10 Javascript
浅谈js中的this问题
Aug 31 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
Feb 15 jQuery
微信小程序rich-text富文本用法实例分析
May 20 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
Aug 13 Javascript
Axios代理配置及封装响应拦截处理方式
Apr 07 Vue.js
浅析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 日漫
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
一个用于MySQL的PHP XML类
2006/10/09 PHP
详解YII关联查询
2016/01/10 PHP
php简单压缩css样式示例
2016/09/22 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
原生js实现密码输入框值的显示隐藏
2017/07/17 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
Python单例模式实例详解
2017/03/01 Python
python中安装Scrapy模块依赖包汇总
2017/07/02 Python
python实现简易通讯录修改版
2018/03/13 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
python ubplot使用方法解析
2020/01/10 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
如何用Python 加密文件
2020/09/10 Python
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
告诉你怎样写创业计划书
2014/01/27 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
保卫工作个人总结
2015/03/03 职场文书
护士自荐信怎么写
2015/03/06 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python
pytorch中的torch.nn.Conv2d()函数图文详解
2022/02/28 Python