2017-7-12 11:34:02 [显示全部楼层]
9113浏览
查看: 9113|回复: 1

[入门教程] 趣味编程指南(8-2)-自定义函数与分形递归

[复制链接]
本帖最后由 kaka 于 2017-8-18 08:27 编辑

好久没更新了,最近事情太多
这次来谈分形
分形

现在你可以通过递归函数探索另一个魅力无穷的世界 - 分形。

趣味编程指南(8-2)-自定义函数与分形递归图1
分形(Fractal),又称碎形、残形,通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。
自然界中就能看到许多分形。
趣味编程指南(8-2)-自定义函数与分形递归图2
趣味编程指南(8-2)-自定义函数与分形递归图3
趣味编程指南(8-2)-自定义函数与分形递归图4趣味编程指南(8-2)-自定义函数与分形递归图5

趣味编程指南(8-2)-自定义函数与分形递归图6趣味编程指南(8-2)-自定义函数与分形递归图7趣味编程指南(8-2)-自定义函数与分形递归图8
现在,相信你对分形已经有些直观的印象了。在程序中设计分形图形相当简单。通过递归你可以用极简的法则创造出丰富的细节。参看下面例子
代码示例(8-8):
[mw_shl_code=applescript,true]void setup() {
      size(400, 400);
    }

    void draw() {
      background(255);
      translate(width/2, height/2);
      recursion(200, 0);
    }

    void recursion(float r, int num) {
      if (r > 10) {
        if (r > 30) {
          noFill();
          stroke(0);
        } else {
          fill(0);
        }
        float ratio = mouseX/(float)width;
        if (ratio > 0.6) {
          ratio = 0.6;
        }
        r = r * ratio;
        num ++;

        // 绘制中心矩形
        rectMode(CENTER);
        rect(0, 0, r * 2, r * 2);

        // 绘制四周矩形
        pushMatrix();
        rotate(millis()/1000.0 * num);
        translate(-r, -r);
        recursion(r, num);
        popMatrix();

        pushMatrix();
        rotate(millis()/1000.0 * num);
        translate(-r, r);
        recursion(r, num);
        popMatrix();

        pushMatrix();
        rotate(millis()/1000.0 * num);
        translate(r, -r);
        recursion(r, num);
        popMatrix();

        pushMatrix();
        rotate(millis()/1000.0 * num);
        translate(r, r);
        recursion(r, num);
        popMatrix();
      }
    }[/mw_shl_code]

趣味编程指南(8-2)-自定义函数与分形递归图9
  • 在一个递归函数的函数中,函数是可以调用多次的。上面的示例就调用了四次,从而创造了多重分支
  • 图形的繁复程度之所以是动态的。是因为用鼠标的横坐标控制了 ratio 的比例。“ ratio = mouseX/(float)width ”。ratio 的值越大,r 值的递减速度就越慢,所以递归的次数会增多,图形数量也会增多
  • ratio 之后添加的一个判断,if(ratio > 0.6){ratio = 0.6;} 是为了让 ratio 的值不超出 0.6。避免程序因为绘制的图形过多而发生崩溃。
  • rotate 可以用注释符隐藏,能更清晰地看见整体的枝干结构。变量 num 的作用是记录当前递归的次数。最终通过 num 影响旋转的速度。可以看到递归的次数越多,方块的旋转速度越快


趣味编程指南(8-2)-自定义函数与分形递归图10
转自www.inslab.cn

wuxing0911  学徒

发表于 2017-8-29 11:41:02

没有了吗?后期还会有教程吗?还没看过瘾就没啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail