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 相关文章推荐
使用jquery解析XML的方法
Sep 05 Javascript
浅谈重写window对象的方法
Dec 29 Javascript
JavaScript中的Function函数
Aug 27 Javascript
AngularJS Bootstrap详细介绍及实例代码
Jul 28 Javascript
学习Angular中作用域需要注意的坑
Aug 17 Javascript
简单实现JavaScript图片切换效果
Nov 28 Javascript
Bootstrap CSS组件之大屏幕展播
Dec 17 Javascript
浅析Vue中method与computed的区别
Mar 06 Javascript
Angular6笔记之封装http的示例代码
Jul 27 Javascript
vue中的ref和$refs的使用
Nov 22 Javascript
详解vue使用插槽分发内容slot的用法
Mar 28 Javascript
js blob类型url的视频下载问题的解决
Nov 29 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下过滤HTML代码的函数
2007/12/10 PHP
PHP生成Flash动画的实现代码
2010/03/12 PHP
php中根据变量的类型 选择echo或dump
2012/07/05 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
Bootstrap table使用方法记录
2017/08/23 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
Python中的闭包实例详解
2014/08/29 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
岗位职责的定义
2013/11/10 职场文书
高一自我鉴定
2013/12/17 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
环卫工作汇报材料
2014/10/28 职场文书
优秀的商业计划书,让融资一步到位
2019/05/07 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android