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 相关文章推荐
非常不错的一个javascript 类
Nov 07 Javascript
精心挑选的15个jQuery下拉菜单制作教程
Jun 15 Javascript
Javascript中判断变量是数组还是对象(array还是object)
Aug 14 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
Mar 09 Javascript
javascript中数组方法汇总
Jul 07 Javascript
JavaScript电子时钟倒计时
Jan 09 Javascript
jquery基本选择器匹配多个元素的实现方法
Sep 05 Javascript
easyui tree带checkbox实现单选的简单实例
Nov 07 Javascript
Vue验证码60秒倒计时功能简单实例代码
Jun 22 Javascript
vue和iview实现Scroll 数据无限滚动功能
Oct 31 Javascript
原生JavaScript创建不可变对象的方法简单示例
May 07 Javascript
一百多行代码实现react拖拽hooks
Mar 23 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漏洞小结
2012/02/05 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
jQuery 加上最后自己的验证
2009/11/04 Javascript
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
js中小数转换整数的方法
2014/01/26 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
jQuery实现图片上传和裁剪插件Croppie
2015/11/29 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
Python入门教程之if语句的用法
2015/05/14 Python
python入门基础之用户输入与模块初认识
2016/11/14 Python
python使用folium库绘制地图点击框
2018/09/21 Python
python安装本地whl的实例步骤
2019/10/12 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
Python中的__init__作用是什么
2020/06/09 Python
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
幼师岗位求职简历的自荐信格式
2013/09/21 职场文书
公司部门司机岗位职责
2014/01/03 职场文书
四下基层实施方案
2014/03/28 职场文书
赔偿协议书范本
2014/04/15 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
学习心理学的体会
2014/11/07 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
让生命充满爱观后感
2015/06/08 职场文书
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js