p5.js 毕达哥拉斯树的实现代码


Posted in Javascript onMarch 23, 2018

本文介绍了p5.js 毕达哥拉斯树的实现代码,分享给大家,具体如下:

效果如下:

p5.js 毕达哥拉斯树的实现代码

主要方法

  1. translate()
  2. rotate()
  3. rect()
  4. push()
  5. pop()
  6. map()

主要思想

递归

草图

p5.js 毕达哥拉斯树的实现代码

过程分解

一、毕达哥拉斯树的递归函数

function Pythagorian(x){
 noStroke();
 fill(107, 142, 35,map(x, 0, a, 150, 255));//根据正方形边长设置填充色
 rect(0,0,x,x);//绘制当前的正方形
 
 if(x <= 3) return 0;//当正方形边长小于3时,结束递归

 /* 绘制右上角的正方形 */ 
 push();
 rotate(PI / 2 - t);//坐标轴顺时针旋转约37deg
 translate(0,-x/5 * 3 - x/5*4);//坐标轴向上平移3边+4边的长度
 Pythagorian(x/5*4);//递归调用毕达哥拉斯函数
 pop();
 
 /* 绘制左上角的正方形 */
 push();
 rotate( - t);//坐标轴逆时针旋转约53deg
 translate(0,-x/5 * 3);//坐标轴向上平移3边的长度
 Pythagorian(x/5*3);//递归调用毕达哥拉斯函数
 pop(); 
 
}

二、声明变量、创建画布

var a = 100; //最大正方形边长
var t;//4边所对应的角度
function setup(){
 t = 53.1301024 / 360 * 2 * PI;//约为53deg
 createCanvas(windowWidth, windowHeight);//创建画布
 background(255);
 noLoop();//draw()函数只执行一次
}

三、开始绘制毕达哥拉斯树

function draw(){
 translate(windowWidth/2, windowHeight - a * 2);//将坐标系平移至画布中间底部
 Pythagorian(a);//调用毕达哥拉斯递归函数
}

绘制毕达哥拉斯树完整代码

var a = 100;
var t;
function setup(){
 t = 53.1301024 / 360 * 2 * PI;
 createCanvas(windowWidth, windowHeight);
 background(255);
 noLoop();
}
function draw(){
 translate(windowWidth/2, windowHeight - a * 2);
 Pythagorian(a);
 
}
function Pythagorian(x){
 noStroke();
 fill(107, 142, 35,map(x, 0, a, 150, 255));
 rect(0,0,x,x);
 
 if(x <= 3) return 0;
 
 push();
 rotate(PI / 2 - t);
 translate(0,-x/5 * 3 - x/5*4);
 Pythagorian(x/5*4);
 pop();
 
 push();
 rotate( - t);
 translate(0,-x/5 * 3);
 Pythagorian(x/5*3);
 pop(); 
 
}

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

Javascript 相关文章推荐
用js计算页面执行时间的函数
Dec 07 Javascript
简单的js分页脚本
May 21 Javascript
jquery实现图片翻页效果
Dec 23 Javascript
JS实现图片无间断滚动代码汇总
Jul 30 Javascript
jQuery中end()方法用法实例
Jan 08 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
Apr 24 Javascript
React Native模块之Permissions权限申请的实例相机
Sep 28 Javascript
原生js实现移动端触摸轮播的示例代码
Dec 22 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
Jan 18 jQuery
详解使用webpack+electron+reactJs开发windows桌面应用
Feb 01 Javascript
node express使用HTML模板的方法示例
Aug 22 Javascript
浅析vue-router实现原理及两种模式
Feb 11 Javascript
轻量级JS Cookie插件js-cookie的使用方法
Mar 22 #Javascript
浅谈Webpack 持久化缓存实践
Mar 22 #Javascript
深入浅析Vue.js中 computed和methods不同机制
Mar 22 #Javascript
Java设计中的Builder模式的介绍
Mar 22 #Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
Mar 22 #Javascript
收集前端面试题之url、href、src
Mar 22 #Javascript
vue 的keep-alive缓存功能的实现
Mar 22 #Javascript
You might like
PHP strtr() 函数使用说明
2008/11/21 PHP
php include类文件超时问题处理
2015/02/06 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
2015/05/11 PHP
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
python基础教程之五种数据类型详解
2017/01/12 Python
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
将python代码和注释分离的方法
2018/04/21 Python
python3.6实现学生信息管理系统
2019/02/21 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
python 的topk算法实例
2020/04/02 Python
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
求职简历推荐信范文
2013/12/02 职场文书
致800米运动员广播稿
2014/02/16 职场文书
工人先锋号申报材料
2014/12/29 职场文书
应届毕业生自荐信
2015/03/04 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
个人收入证明范本
2015/06/12 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
《比的意义》教学反思
2016/02/18 职场文书
实用求职信模板范文
2019/05/13 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
浅谈PHP7中的一些小技巧
2021/05/29 PHP
redis缓存存储Session原理机制
2021/11/20 Redis
vue ref如何获取子组件属性值
2022/03/31 Vue.js