使用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鼠标滑过弹出层的定位IE6bug解决办法
Dec 26 Javascript
JS 有趣的eval优化输入验证实例代码
Sep 22 Javascript
JQuery中form验证出错信息的查看方法
Oct 08 Javascript
jquery html动态生成select标签出问题的解决方法
Nov 20 Javascript
JavaScript中的逻辑判断符&amp;&amp;、||与!介绍
Dec 31 Javascript
javascript中使用正则表达式清理table样式的代码
Apr 01 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
May 24 Javascript
Vue2.x中的父组件传递数据至子组件的方法
May 01 Javascript
Bootstrap一款超好用的前端框架
Sep 25 Javascript
web前端页面生成exe可执行文件的方法
Feb 08 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
May 26 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
Aug 12 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
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
PHP 快速排序算法详解
2014/11/10 PHP
php将html转为图片的实现方法
2017/05/19 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
2019/09/29 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
javascript 数组的方法集合
2008/06/05 Javascript
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
Node.js 的模块知识汇总
2017/08/16 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
[00:35]可解锁地面特效
2018/12/20 DOTA
python标准日志模块logging的使用方法
2013/11/01 Python
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
python安装教程
2018/02/28 Python
Python实现登陆文件验证方法
2018/10/06 Python
python数组循环处理方法
2019/08/26 Python
通过python3实现投票功能代码实例
2019/09/26 Python
Python中six模块基础用法
2019/12/08 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
移风易俗倡议书
2014/04/15 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
创建文明城市标语
2014/06/16 职场文书
信访稳定工作汇报
2014/10/27 职场文书
工程部文员岗位职责
2015/02/04 职场文书
深入理解python多线程编程
2021/04/18 Python