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 相关文章推荐
在Iframe中获取父窗口中表单的值(示例代码)
Nov 22 Javascript
node.js中的fs.readdir方法使用说明
Dec 17 Javascript
jQuery基础知识小结
Dec 22 Javascript
JavaScript数据结构和算法之二叉树详解
Feb 11 Javascript
JavaScript实现对下拉列表值进行排序的方法
Jul 15 Javascript
基于JavaScript实现网页倒计时自动跳转代码
Dec 28 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
Feb 25 Javascript
如何在Angular2中使用jQuery及其插件的方法
Feb 09 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
Jun 07 jQuery
Node.js使用gm拼装sprite图片
Jul 04 Javascript
Js实现复选框的全选、全不选反选功能代码实例
Feb 28 Javascript
vue抽出组件并传值实例
Jul 31 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
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
使用composer 安装 laravel框架的方法图文详解
2019/08/02 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
OpenLayers实现图层切换控件
2020/09/25 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
Django celery异步任务实现代码示例
2020/11/26 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
遗嘱继承公证书
2014/04/09 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
大学生联谊活动策划书(光棍节)
2014/10/10 职场文书
五年级学生期末评语
2014/12/26 职场文书
七年级地理教学计划
2015/01/22 职场文书
情人节单身感言
2015/08/03 职场文书
军训决心书范文
2015/09/22 职场文书