序·吳剛伐桂篇
舊言月中有桂,有蟾蜍,故異書言,月桂高五百丈,下有一人常斫之,樹創隨合。
(前情提要:元通過天闕裂縫離開了他所在的世界...)
吳剛抬頭看了看天,沒有發現什么,只當是出現了幻聽。
第零章 提出問題
元通過細致地觀察與思考,他發現月桂樹是另外一種生長方式,和自己在伊甸園里種的完全不同。
圖3-1 程序渲染隨機樹
“這顆樹的全稱為 Graphics User Interface Tree,中文簡稱:桂樹。”
第一章 作出假設
元用假設解開了自己的疑惑:每個樹枝都是一個獨立的結點,它可以向上再生長 n 個樹枝結點。
圖3-2 較少枝干的樹
第二章 制定計划
元立即制定了實現假設的方案。
樹枝生長步驟
首先,長出第一個樹枝(樹干)
然后,每個樹枝的頂部長出不少於一個樹枝
其中,每個樹枝的粗為上一層 0.618 倍,長度為上一層的 0.618*random(1) 倍
最終,重復第二步,直至樹枝不能更細,或者迭代深度達到上限
圖3-3 光禿的樹
第三章 實踐檢驗
元想到:實踐是檢驗真理的唯一標准。
每個樹枝的頂部用一個向量表示,生長出的子樹枝旋轉一定角度並改變模長即可。
Imports System.Numerics Imports EDGameEngine.Core.Utilities ''' <summary> ''' 樹節點 ''' </summary> Public Class TreeNode ''' <summary> ''' 相對位置 ''' </summary> Public Property Location As Vector2 ''' <summary> ''' 絕對位置 ''' </summary> Public Property RealLocation As Vector2 ''' <summary> ''' 長度 ''' </summary> Public Property Length As Single ''' <summary> ''' 層級 ''' </summary> Public Property Rank As Integer ''' <summary> ''' 父級 ''' </summary> Public Property Parent As TreeNode ''' <summary> ''' 子集 ''' </summary> Public Property Children As New List(Of TreeNode) ''' <summary> ''' 花集 ''' </summary> Public Property Flowers As New List(Of Flower) ''' <summary> ''' 中折角度 ''' </summary> Public Property MidRotateAngle As Single ''' <summary> ''' 生長比例 ''' </summary> Public Property Percent As Single ''' <summary> ''' 凋零比例 ''' </summary> Public Property DiePercent As Single Public Shared Property Rnd As New Random ''' <summary> ''' 創建並初始化一個實例 ''' </summary> Public Sub New(location As Vector2, length As Single, rank As Integer) Me.Location = location Me.Location.SetMag(length) Me.Length = length Me.Rank = rank Me.MidRotateAngle = CSng(Rnd.NextDouble) End Sub End Class
“把樹畫出來就知道結果了。”
第四章 得出結論
樹長成了,元打算撰寫一篇探究實驗報告。
“這片天地與我創造的世界確實不一樣,竟然長成這副樣子。”元有些郁悶。
圖3-4 水墨樹
后記
“哼哼,終於逮住你了。”
...
“我問你話,你可要老實回答。”
“First Name,Second Name?今年幾歲?”
“我只有乳名‘無名兒’,已是總角之齡。”
...
“你爸是誰?”
“爹爹是大英雄,不過我卻從來沒見過。”
“那你媽呢?”
“哼,我娘可是廣寒宮中的仙子,你休得欺負我。”