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 相关文章推荐
对YUI扩展的Gird组件 Part-2
Mar 10 Javascript
Jquery Ajax的Get方式时需要注意URL地方
Apr 07 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
Jan 15 Javascript
JavaScript判断变量是对象还是数组的方法
Aug 28 Javascript
Javascript无参数和有参数类继承问题解决方法
Mar 02 Javascript
jquery实现简单文字提示效果
Dec 02 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
Jun 01 Javascript
javascript用rem来做响应式开发
Jan 13 Javascript
QML实现圆环颜色选择器
Sep 25 Javascript
Angular 多模块项目构建过程
Feb 13 Javascript
js判断密码强度的方法
Mar 18 Javascript
如何制作自己的原生JavaScript路由
May 05 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
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
教你如何使用php session
2013/10/28 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
2014/02/04 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
Python性能优化的20条建议
2014/10/25 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
Python爬虫获取图片并下载保存至本地的实例
2018/06/01 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
迪梵英国官方网站:Darphin英国
2017/12/06 全球购物
优秀幼教自荐信
2014/02/03 职场文书
工厂搬迁方案
2014/05/11 职场文书
护理专业求职信
2014/06/15 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书