使用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 相关文章推荐
js获取或设置当前窗口url参数的小例子
Oct 14 Javascript
jQuery - css() 方法示例详解
Jan 16 Javascript
Express作者TJ告别Node.js奔向Go
Jul 14 Javascript
Node.js的包详细介绍
Jan 14 Javascript
javascript实现计时器的简单方法
Feb 21 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
May 15 Javascript
js实现统计字符串中特定字符出现个数的方法
Aug 02 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
Oct 10 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
Mar 07 Javascript
React注册倒计时功能的实现
Sep 06 Javascript
javascript实现异形滚动轮播
Nov 28 Javascript
小程序实现上下切换位置
Nov 16 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
php根据用户语言跳转相应网页
2015/11/04 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
JS监听滚动和id自动定位滚动
2018/12/18 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
Python学习笔记之常用函数及说明
2014/05/23 Python
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
Python实现微信消息防撤回功能的实例代码
2019/04/29 Python
Pandas分组与排序的实现
2019/07/23 Python
详解python中的异常和文件读写
2021/01/03 Python
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
汽车销售求职自荐信
2013/10/01 职场文书
暑期实践思想汇报
2014/01/06 职场文书
图书室管理制度
2014/01/19 职场文书
团队精神的演讲稿
2014/05/14 职场文书
个人向公司借款协议书
2014/10/09 职场文书
工程进度款催款函
2015/06/24 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
导游词之襄阳古城
2019/09/27 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python
element tree树形组件回显数据问题解决
2022/08/14 Javascript