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 禁止复制网页
Jun 11 Javascript
基于jquery的图片懒加载js
Jun 30 Javascript
javscript对象原型的一些看法
Sep 19 Javascript
用jquery和json从后台获得数据集的代码
Nov 07 Javascript
JavaScript判断用户是否对表单进行了修改的方法
Mar 18 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
Jan 29 Javascript
canvas红包照片实例分享
Feb 28 Javascript
详解Vue CLI3配置解析之css.extract
Sep 14 Javascript
angular5 子组件监听父组件传入值的变化方法
Sep 30 Javascript
vue+element tabs选项卡分页效果
Jun 29 Javascript
使用layui的layer组件做弹出层的例子
Sep 27 Javascript
vue 动态生成拓扑图的示例
Jan 03 Vue.js
轻量级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
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
2016/08/03 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
解析Vue.js中的组件
2018/02/02 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
Python面向对象class类属性及子类用法分析
2018/02/02 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
2018/12/13 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
python实现图片中文字分割效果
2019/07/22 Python
Numpy的简单用法小结
2019/08/28 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
Numpy数组的广播机制的实现
2020/11/03 Python
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
新郎父亲婚宴答谢词
2014/01/11 职场文书
中秋节主持词
2014/04/02 职场文书
服务承诺书范文
2014/05/19 职场文书
询价采购方案
2014/06/09 职场文书
敬老院活动感想
2015/08/07 职场文书
2019通用版导游词范本!
2019/08/07 职场文书