編程模擬自然(六):如何畫一顆動態樹


序·亞當夏娃篇

  《元紀》上記載,在伊甸園的中央有兩棵樹,一棵為生命樹,一棵為真值樹。

  創世神對他的子民說,園子里各樣的果子都可以吃,除了真值樹上的果子不可吃。

  但亞當夏娃受了蛇的誘惑,吃了真值果,從此他們兩人知曉了真假,離開伊甸園后過上了幸福快樂的生活。

  (前情提要:創世神元離開了,但亞當和夏娃還在伊甸園里生活着...)

  “這條蛇怎么一動不動啊?”夏娃小心翼翼地躲在亞當身后。

  “蛇是冷血動物,啟動比較慢!”亞當做着解釋。

  .....一刻鍾后,蛇醒了過來。

  “你是誰?為何出現在這里?”亞當的語氣有些不滿,估摸着這蛇剛才驚嚇到了夏娃。

  “哦,你好,我的名字是 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 吐了下蛇信子,反問道。

后記

  后世。

  “神父,聖母夏娃和亞當初為什么選擇離開伊甸園啊?”

  “他們要去找尋創世神的足跡呀!”  

  “父親,聖母夏娃和亞當初為什么選擇離開伊甸園啊?”

  “他們不想兩人的愛情結晶也被困在一個小地方呀!”

  “老師,......啊?”

  “啊什么啊,一天不好好學習,就知道胡思亂想!”

  .......

  “夏娃,......”

  “外面世界那么大,我想去看看吖!”

附錄

  預知后情,且看下回分解。了解更多請瀏覽目錄導航


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM