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 相关文章推荐
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
Apr 20 Javascript
Javascript让DEDECMS告别手写Tag
Sep 01 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
Sep 04 Javascript
jQuery删除节点用法示例(remove方法)
Sep 08 Javascript
JS实现的驼峰式和连字符式转换功能分析
Dec 21 Javascript
Angular2安装angular-cli
May 21 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
Sep 14 Javascript
layui表单提交到后台自动封装到实体类的方法
Sep 12 Javascript
vue下的@change事件的实现
Oct 25 Javascript
Vue 实现把表单form数据 转化成json格式的数据
Oct 29 Javascript
Nuxt配置Element-UI按需引入的操作方法
Jul 06 Javascript
js实现滑动滑块验证登录
Jul 24 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 神盾解密工具 ”
2014/06/20 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
2016/12/02 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
关于img的href和src取变量及赋值的方法
2014/04/28 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
js基于cookie记录来宾姓名的方法
2016/07/19 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
详解python while 函数及while和for的区别
2018/09/07 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
实例讲解Python3中abs()函数
2019/02/19 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
环境工程专业个人求职信
2013/12/05 职场文书
红头文件任命书范本
2014/06/05 职场文书
同学聚会策划方案
2014/06/06 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
运动会广播稿200字
2014/10/18 职场文书
出纳工作检讨书范文
2014/12/27 职场文书
百万英镑观后感
2015/06/09 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
nginx搭建NFS网络文件系统
2022/04/14 Servers