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 面向对象编程 万物皆对象
Sep 17 Javascript
Javascript事件热键兼容ie|firefox
Dec 30 Javascript
JavaScript中原型和原型链详解
Feb 11 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
Aug 21 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
Mar 08 Javascript
jQuery+ajax+asp.net获取Json值的方法
Jun 08 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
Jun 11 Javascript
JS异步执行结果获取的3种解决方式
Feb 19 Javascript
利用Promise自定义一个GET请求的函数示例代码
Mar 20 Javascript
vue-router 起步步骤详解
Mar 26 Javascript
vue-iview动态新增和删除的方法
Jun 17 Javascript
vue 实现根据data中的属性值来设置不同的样式
Aug 04 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中使用Oracle数据库(4)
2006/10/09 PHP
生成静态页面的php函数,php爱好者站推荐
2007/03/19 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
PHP 实现缩略图
2021/03/09 PHP
JS实现的省份级联实例代码
2013/06/24 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
原生js实现验证码功能
2017/03/16 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
python自动翻译实现方法
2016/05/28 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
使用python实现飞机大战游戏
2020/03/23 Python
HTML5中Canvas与SVG的画图原理比较
2013/01/16 HTML / CSS
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
公司司机岗位职责
2014/02/07 职场文书
高中生职业生涯规划书
2014/02/24 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
学生检讨书怎么写
2014/10/09 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
《灰雀》教学反思
2016/02/19 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书