p5.js实现斐波那契螺旋的示例代码


Posted in Javascript onMarch 22, 2018

本篇文章主要介绍了p5.js实现斐波那契螺旋的示例代码,分享给大家,也给自己做个笔记

效果如下:

p5.js实现斐波那契螺旋的示例代码

主要方法

  1. translate()
  2. rotate()
  3. arc()

斐波那契螺旋

斐波那契螺旋线也称“黄金螺旋”,是根据斐波那契数列画出来的螺旋曲线,以斐波那契数为边的正方形中画一个90度的扇形,连起来的弧线就是斐波那契螺旋。

草图

p5.js实现斐波那契螺旋的示例代码

过程分解

一、定义一个空的斐波那契数组:

var Fibonacci = [];

二、初始化

默认情况下draw()函数会无限重复绘图, frameRate()函数可以设置每秒重复绘图的次数,就像电影每秒播放的帧数。

function setup(){
 createCanvas(windowWidth, windowHeight);//创建一块画板,画板的宽高与浏览器宽高相同
 background(255);//设置背景颜色为白色
 frameRate(10);//设置每秒10帧
}

三、设置斐波那契螺旋的样式

function draw(){
 ...
 stroke(0);//线条颜色为黑色
 noFill();//无填充色
 strokeWeight(5);//线条宽度为5
 translate(windowWidth/2, windowHeight/2);//将坐标系移动到页面中央
 ...
}

四、开始绘制斐波那契螺旋

function draw(){
 ...
 stroke(0);
 noFill();
 strokeWeight(5);
 translate(windowWidth/2, windowHeight/2);
 ...
 for( var i = 0; i < 20; i ++){//绘制20段90度弧线
  var a = i <= 1 ? 1 : Fibonacci[i-1] + Fibonacci[i-2];
//这是条件表达式,如果i等于0或1,那么a等于1;否则等于斐波那契数列前两项的和
  Fibonacci.push(a);//将新得到的a加入斐波那契数列中
  arc(0,0,a * 2,a * 2,0,PI / 2);//绘制圆心在(0,0)直径为2*a度数为90度的弧形

  /**********以下是为下一段弧线做准备************/
  rotate(PI / 2);//将坐标系按顺时针旋转90度
  translate(-Fibonacci[i-1],0); //将坐标系沿着X轴反向移动上一项的长度
 } 
}

五、让斐波那契螺旋动起来

function draw(){
 background(255);//将背景设置成白色,“遮盖”之前的绘图
 stroke(0);
 noFill();
 strokeWeight(5);
 translate(windowWidth/2, windowHeight/2);
 rotate(-PI / 6 * frameCount);//每帧旋转30度,frameCount表示当前已播放帧数
 for( var i = 0; i < 20; i ++){
  var a = i <= 1 ? 1 : Fibonacci[i-1] + Fibonacci[i-2];
  Fibonacci.push(a);
  arc(0,0,a * 2,a * 2,0,PI / 2);
  rotate(PI / 2);
  translate(-Fibonacci[i-1],0); 
 } 
}

完整代码

var Fibonacci = [];

function setup(){
 createCanvas(windowWidth, windowHeight);
 background(255);
 frameRate(10);
}

function draw(){
 background(255);
 stroke(0);
 noFill();
 strokeWeight(5);
 translate(windowWidth/2, windowHeight/2);
 rotate(-PI / 6 * frameCount);
 for( var i = 0; i < 20; i ++){
  var a = i <= 1 ? 1 : Fibonacci[i-1] + Fibonacci[i-2];
  Fibonacci.push(a);
  arc(0,0,a * 2,a * 2,0,PI / 2);
  rotate(PI / 2);
  translate(-Fibonacci[i-1],0); 
 } 
}

function windowResized(){
 resizeCanvas(windowWidth, windowHeight);
}

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

Javascript 相关文章推荐
用JS写的一个TableView控件代码
Jan 23 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
Apr 26 Javascript
浅谈jQuery中的事件
Mar 23 Javascript
javascript文件加载管理简单实现方法
Jul 25 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
Dec 22 Javascript
JavaScript实现图片懒加载(Lazyload)
Nov 28 Javascript
Bootstrap导航简单实现代码
Mar 06 Javascript
javascript用rem来做响应式开发
Jan 13 Javascript
Nuxt.js SSR与权限验证的实现
Nov 21 Javascript
vue+moment实现倒计时效果
Aug 26 Javascript
微信小程序云函数添加数据到数据库的方法
Mar 04 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
Apr 26 Javascript
基于JavaScript实现幸运抽奖页面
Jul 05 #Javascript
Vue封装一个简单轻量的上传文件组件的示例
Mar 21 #Javascript
基于vue-video-player自定义播放器的方法
Mar 21 #Javascript
基于iScroll实现内容滚动效果
Mar 21 #Javascript
JS中的回调函数实例浅析
Mar 21 #Javascript
使用Vue制作图片轮播组件思路详解
Mar 21 #Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
Mar 21 #Javascript
You might like
?繁体转换的class
2006/10/09 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
VueCli3构建TS项目的方法步骤
2018/11/07 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
详解React 条件渲染
2020/07/08 Javascript
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
python3制作捧腹网段子页爬虫
2017/02/12 Python
Python基于numpy灵活定义神经网络结构的方法
2017/08/19 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
Python3 max()函数基础用法
2019/02/19 Python
Django REST Framework序列化外键获取外键的值方法
2019/07/26 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
意大利在线药房:Saninforma
2021/02/11 全球购物
个人简历自荐信
2013/12/05 职场文书
硕士研究生自我鉴定范文
2013/12/27 职场文书
魅力教师事迹材料
2014/01/10 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL