p5.js 毕达哥拉斯树的实现代码

 更新时间:2018年03月23日 08:34:36   作者:SampleTape  
这篇文章主要介绍了p5.js 毕达哥拉斯树的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

本文介绍了p5.js 毕达哥拉斯树的实现代码,分享给大家,具体如下:

效果如下:

主要方法

  1. translate()
  2. rotate()
  3. rect()
  4. push()
  5. pop()
  6. map()

主要思想

递归

草图

过程分解

一、毕达哥拉斯树的递归函数

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(); 
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • CocosCreator经典入门项目之flappybird

    CocosCreator经典入门项目之flappybird

    这篇文章主要介绍了CocosCreator经典入门项目之flappybird,详细说明了制作的每个步骤,还有详尽的代码,对CocosCreator感兴趣的同学,一定要看一下
    2021-04-04
  • ECMAScript5中的对象存取器属性:getter和setter介绍

    ECMAScript5中的对象存取器属性:getter和setter介绍

    这篇文章主要介绍了ECMAScript5中的对象属性存取器:getter和setter介绍,事实上在除ie外最新主流浏览器的实现中,任何一个对象的键值都可以被getter和setter方法所取代,这被称之为“存取器属性”,需要的朋友可以参考下
    2014-12-12
  • JavaScript动态修改弹出窗口大小的方法

    JavaScript动态修改弹出窗口大小的方法

    这篇文章主要介绍了JavaScript动态修改弹出窗口大小的方法,涉及javascript中window.open方法的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • 深入理解JavaScript系列(2) 揭秘命名函数表达式

    深入理解JavaScript系列(2) 揭秘命名函数表达式

    网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点
    2012-01-01
  • JavaScript 防篡改对象的用法示例

    JavaScript 防篡改对象的用法示例

    这篇文章主要介绍了JavaScript 防篡改对象的用法示例,帮助大家更好的理解和学习使用JavaScript,感兴趣的朋友可以参考下
    2021-04-04
  • JavaScript实现音乐播放器

    JavaScript实现音乐播放器

    这篇文章主要为大家详细介绍了JavaScript实现音乐播放器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 新手学习前端之js模仿淘宝主页网站

    新手学习前端之js模仿淘宝主页网站

    淘宝网大家在熟悉不过了,那么淘宝网首页模板是怎么做的呢?今天小编抽时间给大家分享新手学习前端之js模仿淘宝主页网站的相关资料,需要的朋友可以参考下
    2016-10-10
  • JS 解决Cannot set properties of undefined的问题

    JS 解决Cannot set properties of undefined的问题

    遇到这样问题当前的是当前对象或者数组是undefined,但是却用来引用属性或者索引,遇到这样的问题如何解决呢,下面通过本文给大家介绍JS 如何解决Cannot set properties of undefined,需要的朋友可以参考下
    2024-01-01
  • javascript操作表格排序实例分析

    javascript操作表格排序实例分析

    这篇文章主要介绍了javascript操作表格排序,涉及javascript数组排序与表格操作的相关技巧,需要的朋友可以参考下
    2015-05-05
  • Avalonjs 实现简单购物车功能(实例代码)

    Avalonjs 实现简单购物车功能(实例代码)

    avalon是国内最强大的MVVM框架,最近小编在高购物车的项目,我们是用avalon来实现一些模块的,所以顺其自然的用avalon来实现购物车。接下来通过本文给大家分享Avalonjs 实现简单购物车功能的实例代码,需要的的朋友参考下
    2017-02-02

最新评论