分形树

2022-07-30  本文已影响0人  大龙10

书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
第8章目录

8.5 树

1、确定性分形技术构建

2、实现的思路

translate(0,-100);
rotate(PI/6);
line(0,0,0,-100);
translate(width/2, height);
line(0,0,0,-100); 树干
translate(0,-100);
pushMatrix();
rotate(PI/6);
line(0,0,0,-100); 右边的树枝
popMatrix();
rotate(-PI/6);
line(0,0,0,-100); 左边的树枝

3、递归树的实现

void branch() {
    line(0, 0, 0, -100); 绘制树枝
    translate(0, -100); 平移到末尾
    pushMatrix();
    rotate(PI/6); 向右旋转,再画新的树枝
    branch();
    popMatrix();
    pushMatrix();
    rotate(-PI/6); 向左旋转,再画新的树枝
    branch();
    popMatrix();
}
void branch(float len) { branch()函数接受一个长度参数
    line(0, 0, 0, -len);
    translate(0, -len);
    len *= 0.66; 每个树枝的长度以2/3的倍数缩短
    if (len > 2) {
        pushMatrix();
        rotate(theta);
        branch(len); 后续的branch()调用必须传入长度参数
        popMatrix()
        pushMatrix();
        rotate(-theta);
        branch(len);
        popMatrix();
        }
}

4、随机分形树

void branch(float len) {
    float theta = random(0, PI/3); 选择一个随机数作为树枝的角度
    line(0, 0, 0, -len);
    translate(0, -len);
    len *= 0.66;
    if (len > 2) {
        pushMatrix();
        rotate(theta);
        branch(len);
        popMatrix();
        pushMatrix();
        rotate(-theta);
        branch(len);
        popMatrix();
        }
}
上一篇 下一篇

猜你喜欢

热点阅读