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 相关文章推荐
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
Nov 21 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
Oct 11 Javascript
一个JavaScript操作元素定位元素的实例
Oct 29 Javascript
jQuery异步获取json数据方法汇总
Dec 22 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
Jan 08 Javascript
jQuery实现内容定时切换效果完整实例
Apr 06 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
Jul 27 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
Mar 09 Javascript
jQuery实现frame之间互通的方法
Jun 26 jQuery
vue router自动判断左右翻页转场动画效果
Oct 10 Javascript
JQuery插件tablesorter表格排序实现过程解析
May 28 jQuery
详解vue修改elementUI的分页组件视图没更新问题
Nov 13 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
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
jquery一句话全选/取消全选
2011/03/01 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
Python可变参数函数用法实例
2015/07/07 Python
Python 的内置字符串方法小结
2016/03/15 Python
python3人脸识别的两种方法
2019/04/25 Python
django项目中新增app的2种实现方法
2020/04/01 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
Python包和模块的分发详细介绍
2020/06/19 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
在线服装零售商:SheIn
2016/07/22 全球购物
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
项目经理岗位职责
2013/11/11 职场文书
书法培训心得体会
2014/01/05 职场文书
军人违纪检讨书
2014/02/04 职场文书
企业年度评优方案
2014/06/02 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
办理房产证委托书
2014/09/18 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
队名及霸气口号大全
2015/12/25 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python
pt-archiver 主键自增
2022/04/26 MySQL