構成L-system的,是一串由符號所構成的字串。這字串裡頭的符號,可以是字母或者是任何喜歡的鬼畫符,想要用emoji也可以,只要你喜歡,沒什麼不可以。
雖然說只要喜歡,沒什麼不可以,不過除非是想展現讓人不明所以,看多了會燒壞腦袋瓜的藝術天分,不然最好還是用大家習慣上常用的符號,正所謂入鄉隨俗是也。這就好像圓週率,全世界都已經習慣用π來代表,你卻非得用個x不可,這不是自找麻煩嗎?即便你事先有說明,人家在看的時候,還是得多花精神去注意你的x是圓週率,不是什麼未知的變數,那實在是很累人又容易搞錯。所以囉,寫東西前,先看看那個圈子裡頭有沒有什麼「慣例」,是個好習慣。
說起「慣例」這檔事,就不免想到,以前在學資料庫時,會說到資料庫「抓」資料。不過事隔多年後,卻發現大家說的是到資料庫「撈」資料。雖然一開始有點不習慣,不過還是跟著說「撈」資料,反正不管是抓魚還是撈魚,有得吃最重要。這正是所謂見人說人話、見鬼說鬼話,使用相同的「行話」,也就是語言「慣例」,會讓人比較覺得你是同一國的,溝通起來會容易一些。
看了幾篇網路上關於使用turtle搭配L-system來畫出漂亮圖案的文章,文章中,L-system字串裡頭的符號所代表的意義,大致上都差不多。用turtle畫圖時,畫筆的動作不外乎是:移動並畫線、移動但不畫線、轉角度等。所以L-system中的符號所代表的,大致上也就是這些動作。例如F、G代表沿目前的方向,移動一段事先定好的距離,並畫下直線;f、g則只是移動,不畫線。左中刮號 [ ,是把目前的狀態(包含位置和方向)push進stack中;右中刮號 ] ,則是pop出stack中的狀態。不過,轉角度這個動作,雖然不同的文章都是用+、- 來代表,但有些卻有著相反的設定,有的文章用+來代表向右轉,而用 - 代表向左轉;有的文章則倒過來,用+來代表向左轉,而用 - 代表向右轉。這實在是個有趣的現象。
之所以會覺得有趣,是因為想起數學課學到座標系統和三角函數時的痛苦。在數學中,逆時針方向轉動的角度是正的,而順時針方向轉動的角度是負的。當時可是花了不少功夫才適應這樣子的設定。直覺上,總覺得順時針方向的角度是正的,而逆時針方向的角度是負的。所以在寫程式時,當寫到要用哪個符號來代表向左轉時,本來直覺的就選了 - ,後來理性思考後,還是決定依照數學上的用法,用+來代表向左轉,畢竟用turtle畫圖時,所使用的,就是數學上的直角座標系統。事後想想,還真是好奇,不知道那些在向左轉、向右轉選用不同設定的作者,是基於什麼樣的原因,選用那樣子的設定。
或許不同的向左轉、向右轉符號設定,背後並沒什麼特別的原因,就只是單純的隨意選擇而已。不過,如果對照左、右中刮號的用法,卻總覺得事情沒那麼單純。
用左中刮號 [ 來代表把狀態push進stack中,感覺上是那麼的自然、順暢,而且大家是有志一同,都這麼設定。但在用 +、- 來代表轉動的方向時,卻出現了分歧。越想越覺得,這裡頭應該有些什麼有趣的原因。
先來看看左中刮號 [ 好了。很明顯的,這左中刮號的長相,就是個開口向右的容器。要把東西塞到這樣的容器裡頭,對於右撇子而言,當然就是左手拿容器,右手拿東西用力塞進去。這感覺多順啊!既然大多數人都是右撇子,這樣子的設定,應該就會是大多數人的選擇。所以囉,網路上看到的,都是這樣子的設定,也就沒什麼好奇怪的了。
左中刮號有形象上的解釋,那+、- 呢?仔細想想,還真是一人一把號,各吹各的調。數學上逆時針方向的角度是正的,但是日常生活中,卻有不少東西的設計,是採用順時針方向代表增量的設定,例如音響的旋鈕、汽、機車時速表,乃至於許許多多的儀表等,都是這樣的設計。或許是這樣的原因,才導致在選用+或 - 來代表向右轉時,大家會有不同的選擇。不過話又說回來,那些旋鈕、儀表,當初為什麼會設計成順時針方向是增量呢?好奇耶!