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 Dialog 实践分享
Oct 22 Javascript
jq选项卡鼠标延迟的插件实例
May 13 Javascript
js切换光标示例代码
Oct 10 Javascript
jQuery实现鼠标经过图片预览大图效果
Apr 10 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
Jan 13 Javascript
Bootstrap源码解读网格系统(3)
Dec 22 Javascript
详解Jquery 遍历数组之$().each方法与$.each()方法介绍
Jan 09 Javascript
jQuery实现鼠标经过显示动画边框特效
Mar 24 jQuery
jQuery Autocomplete简介_动力节点Java学院整理
Jul 17 jQuery
基于Vue的移动端图片裁剪组件功能
Nov 28 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
Jul 17 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
Sep 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生成唯一数字id的方法汇总
2015/11/18 PHP
Symfony2函数用法实例分析
2016/03/18 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
js的表单操作 简单计算器
2011/12/29 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
jquery.pager.js分页实现详解
2019/07/29 jQuery
django js实现部分页面刷新的示例代码
2018/05/28 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
基于python实现名片管理系统
2018/11/30 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
python实现超级马里奥
2020/03/18 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
日语翻译个人求职的自我评价
2013/10/14 职场文书
毕业求职自荐信格式是什么
2013/11/19 职场文书
房产买卖委托公证书
2014/04/04 职场文书
小学教师评语大全
2014/04/23 职场文书
运动会稿件100字
2014/09/24 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
学校政风行风整改方案
2014/10/25 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
python如何进行基准测试
2021/04/26 Python
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫