编程模拟自然(六):如何画一颗动态树

序·亚当夏娃篇

  《元纪》上记载,在伊甸园的中央有两棵树,一棵为生命树,一棵为真值树。

  创世神对他的子民说,园子里各样的果子都可以吃,除了真值树上的果子不可吃。

  但亚当夏娃受了蛇的诱惑,吃了真值果,从此他们两人知晓了真假,离开伊甸园后过上了幸福快乐的生活。

  (前情提要:创世神元离开了,但亚当和夏娃还在伊甸园里生活着...)

  “这条蛇怎么一动不动啊?”夏娃小心翼翼地躲在亚当身后。

  “蛇是冷血动物,启动比较慢!”亚当做着解释。

  .....一刻钟后,蛇醒了过来。

  “你是谁?为何出现在这里?”亚当的语气有些不满,估摸着这蛇刚才惊吓到了夏娃。

  “哦,你好,我的名字是 VisualSnake,觉得长可以简称 VS。”

  “这么奇怪的名字。”

  “这是创世神起的,我可是他手底下最得意的 IDE。”

  “想起来了,我在前年见过你。”夏娃想起了什么。

  “哦?那不是我,蛇每年都要蜕皮换代的!”VS 回答。

  蛇思索了下,继续说

  “...我想你见到的应该是 VS2013。”

图6-1 创世神的警告

第零章 如何成为一名优秀的程序猿

  “为什么警告有 256 条?”夏娃有些疑惑。

  “多于 256 条就会引发 SnakeOverflow,我是不会吃饱了撑着的。”VS 想摊一下双手的,意识到自己没有手只好摇一摇尾巴。

  优秀的条件

  “既然警告这么多次,那我们就不吃了。“

  “别啊,一名合格的程序猿从来都是无视警告,他只关心错误!“

  “啊?“

  “开玩笑的,优秀是由好的习惯、辛勤劳动、惊人毅力...共同促成。”

  “那我们要怎么做呢?”亚当问了关键的一句。

  “你们将在我的帮助下完成一个项目,只有实践才能真正出真知...”

  “同时在这过程中我将教会你们优秀程序猿进行程序开发的必备准则。”

  “所以一款优秀的 IDE 也是很重要的,比如我...”VS 絮絮叨叨个没完。

第一章 原则

  “无论一条原则是如何地正确,都只能在特定场合发挥作用。”

  Hello World

  “你们要做的程序是创世神留下来的静态树,现在需要你们进一步完善它。”

  “首先给你们的项目起个名称,要求不能是 aa, test, MyFirstProject ...”

  “不如叫 HelloWorld 吧。”亚当突然冒出一句。

  “小伙子,你很有天赋啊!”

图6-2 创世神的水墨静态树

  “这是一颗静态树,现在你们要设计算法让它可以生长。”

第二章 从简单开始

  “无论是学习过程还是程序开发,从简单开始。”

  给每个树干设定一个成长系数,树干的长度和宽度都和这个系数相关。

图6-3 动态树-生长

  ----

  “逐步求精方法就如同这树木成长,由简到繁,符合大自然的规律,哈哈...”VS 似乎很喜欢这种淳淳教诲的感觉。

第三章 避免重复错误

  “夏娃小姐,你有一条错误。”

  “什么?错误?没有啊”

  “是的,你有一条错误信息”

  “是出你错了,不是我错了”

  “……“

  ----

  每个枝干旋转一定角度(节点的旋转角度是其父节点的 1.618 倍)

图6-3 动态树-晃动

  但是这样的摇动有些生硬,看起来就像每个树枝对风的受力都是一样的。

  好的方法是,假设风向水平,那么越垂直的树枝需要抖动的越厉害。(将树枝旋转的角度乘以方向与风向的夹角正弦值即可)

图6-4 动态树-晃动优化

  ----

  “前进道路中的错误时不可预料的,走错了方向就要及时纠正,错误同正确一样都是宝贵的经验!” 

  “那警告呢?”夏娃对刚才 VS 报错有些耿耿于怀。

  “......警告也要尽量避免,毕竟事物很难完美。”VS 越教越自信了。

第四章 善用奏效的方法

  “总结过去是为了更好的未来。”

  开出花朵,叶子凋零。

图6-5 动态树-落叶

  ----

  “掌握了简单的方法,以后就可以应用到复杂的问题中去,这也是为什么前面要说的从简单开始。”

  “那大道至简怎么解释?”一直默默写代码的亚当终于说话了。

  “一个完美的公式、统一的定理,虽然在在形式上是简单的,但它的内涵却是复杂的。”VS 感觉自己化身一位老学究,没有人能够质疑他的话。

第五章 摒弃固执己见

  “新旧事物都有好有坏,远离偏见,没有最好只有最适合的。”

  树枝用贴图画效果会好看很多。

图6-6 树枝贴图/画线

图6-7 直线树枝

 

图6-8 贴图树枝

  ----

  “你为什么要教授我们这些?”

  “创世神离开伊甸园的时候,就推出了 VS 的‘伊甸社区版’,对你们个人是免费的。”

  “再说了,难道你们就想一直待在这里?”VS 吐了下蛇信子,反问道。

后记

  很多很多年后。

  “神父,圣母夏娃和亚当初为什么选择离开伊甸园?”

  “他们要去找寻创世神的足迹!”  

  “父亲,夏娃和亚当前辈初为什么选择离开伊甸园啊?”

  “他们不想两人的爱情结晶被困在一个地方!”

  .......

  “夏娃,......”

  “世界那么大,我们出发吧!”

附录

  预知后情,且看下回分解。了解更多请浏览目录导航

posted @ 2016-02-01 02:23  ExperDot  阅读(2782)  评论(4编辑  收藏  举报