向左轉﹡向右轉

更新於 發佈於 閱讀時間約 5 分鐘

構成L-system的,是一串由符號所構成的字串。這字串裡頭的符號,可以是字母或者是任何喜歡的鬼畫符,想要用emoji也可以,只要你喜歡,沒什麼不可以。

雖然說只要喜歡,沒什麼不可以,不過除非是想展現讓人不明所以,看多了會燒壞腦袋瓜的藝術天分,不然最好還是用大家習慣上常用的符號,正所謂入鄉隨俗是也。這就好像圓週率,全世界都已經習慣用π來代表,你卻非得用個x不可,這不是自找麻煩嗎?即便你事先有說明,人家在看的時候,還是得多花精神去注意你的x是圓週率,不是什麼未知的變數,那實在是很累人又容易搞錯。所以囉,寫東西前,先看看那個圈子裡頭有沒有什麼「慣例」,是個好習慣。

說起「慣例」這檔事,就不免想到,以前在學資料庫時,會說到資料庫「抓」資料。不過事隔多年後,卻發現大家說的是到資料庫「撈」資料。雖然一開始有點不習慣,不過還是跟著說「撈」資料,反正不管是抓魚還是撈魚,有得吃最重要。這正是所謂見人說人話、見鬼說鬼話,使用相同的「行話」,也就是語言「慣例」,會讓人比較覺得你是同一國的,溝通起來會容易一些。

看了幾篇網路上關於使用turtle搭配L-system來畫出漂亮圖案的文章,文章中,L-system字串裡頭的符號所代表的意義,大致上都差不多。用turtle畫圖時,畫筆的動作不外乎是:移動並畫線、移動但不畫線、轉角度等。所以L-system中的符號所代表的,大致上也就是這些動作。例如F、G代表沿目前的方向,移動一段事先定好的距離,並畫下直線;f、g則只是移動,不畫線。左中刮號 [ ,是把目前的狀態(包含位置和方向)push進stack中;右中刮號 ] ,則是pop出stack中的狀態。不過,轉角度這個動作,雖然不同的文章都是用+、- 來代表,但有些卻有著相反的設定,有的文章用+來代表向右轉,而用 - 代表向左轉;有的文章則倒過來,用+來代表向左轉,而用 - 代表向右轉。這實在是個有趣的現象。

之所以會覺得有趣,是因為想起數學課學到座標系統和三角函數時的痛苦。在數學中,逆時針方向轉動的角度是正的,而順時針方向轉動的角度是負的。當時可是花了不少功夫才適應這樣子的設定。直覺上,總覺得順時針方向的角度是正的,而逆時針方向的角度是負的。所以在寫程式時,當寫到要用哪個符號來代表向左轉時,本來直覺的就選了 - ,後來理性思考後,還是決定依照數學上的用法,用+來代表向左轉,畢竟用turtle畫圖時,所使用的,就是數學上的直角座標系統。事後想想,還真是好奇,不知道那些在向左轉、向右轉選用不同設定的作者,是基於什麼樣的原因,選用那樣子的設定。

或許不同的向左轉、向右轉符號設定,背後並沒什麼特別的原因,就只是單純的隨意選擇而已。不過,如果對照左、右中刮號的用法,卻總覺得事情沒那麼單純。

用左中刮號 [ 來代表把狀態push進stack中,感覺上是那麼的自然、順暢,而且大家是有志一同,都這麼設定。但在用 +、- 來代表轉動的方向時,卻出現了分歧。越想越覺得,這裡頭應該有些什麼有趣的原因。

先來看看左中刮號 [ 好了。很明顯的,這左中刮號的長相,就是個開口向右的容器。要把東西塞到這樣的容器裡頭,對於右撇子而言,當然就是左手拿容器,右手拿東西用力塞進去。這感覺多順啊!既然大多數人都是右撇子,這樣子的設定,應該就會是大多數人的選擇。所以囉,網路上看到的,都是這樣子的設定,也就沒什麼好奇怪的了。

左中刮號有形象上的解釋,那+、- 呢?仔細想想,還真是一人一把號,各吹各的調。數學上逆時針方向的角度是正的,但是日常生活中,卻有不少東西的設計,是採用順時針方向代表增量的設定,例如音響的旋鈕、汽、機車時速表,乃至於許許多多的儀表等,都是這樣的設計。或許是這樣的原因,才導致在選用+或 - 來代表向右轉時,大家會有不同的選擇。不過話又說回來,那些旋鈕、儀表,當初為什麼會設計成順時針方向是增量呢?好奇耶!

留言
avatar-img
留言分享你的想法!
ysf-avatar-img
發文者
2022/12/18
😄
Red-avatar-img
2022/12/17
雖然看不懂居多,為難我這個學文科的人,呵呵!但我可以看出充滿趣味~
avatar-img
ysf的沙龍
15會員
142內容數
寫點東西自娛娛人
ysf的沙龍的其他內容
2025/04/14
花了些時間,靜下心來,仔仔細細地研究了一番,總算把Python呼叫函數時引數的傳遞方式給徹底搞清楚了。
2025/04/14
花了些時間,靜下心來,仔仔細細地研究了一番,總算把Python呼叫函數時引數的傳遞方式給徹底搞清楚了。
2024/05/08
呼!折騰了好久,終於徹底搞清楚pygame的各個blend mode所用的計算式,到底是長啥樣子了。
2024/05/08
呼!折騰了好久,終於徹底搞清楚pygame的各個blend mode所用的計算式,到底是長啥樣子了。
2023/12/20
在寫《The Nature of Code閱讀心得筆記——使用Python實作》的[第四章]4.3節時,原書提到,在使用Java的ArrayList時,如果用迴圈一面走訪一面又移除其中的元素,那會有難以察覺的問題存在。寫個小程式測試的結果發現,Python的list也會有一樣的問題。
Thumbnail
2023/12/20
在寫《The Nature of Code閱讀心得筆記——使用Python實作》的[第四章]4.3節時,原書提到,在使用Java的ArrayList時,如果用迴圈一面走訪一面又移除其中的元素,那會有難以察覺的問題存在。寫個小程式測試的結果發現,Python的list也會有一樣的問題。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
為了打破慣性 開始用左手畫畫 也想著每天還能做一些什麼不同的選擇呢
Thumbnail
為了打破慣性 開始用左手畫畫 也想著每天還能做一些什麼不同的選擇呢
Thumbnail
為了要打破慣性思考,開發右腦,最近開始刻意多使用左手。
Thumbnail
為了要打破慣性思考,開發右腦,最近開始刻意多使用左手。
Thumbnail
首先是Y-Δ轉換口語的念法,筆者習慣稱為Y-Delte轉換,直接以英文發音為主;而它還有個中文名稱為星角轉換,也就是星形跟三角形轉換。 這是一份筆者常常使用的小工具,用來快速調整Y接或Δ接馬達設計變換時,線圈繞線條件的更改;但作為馬達設計者而言,是絕不需要考慮的Δ接設計方案。主要是Δ接會在馬達的三
Thumbnail
首先是Y-Δ轉換口語的念法,筆者習慣稱為Y-Delte轉換,直接以英文發音為主;而它還有個中文名稱為星角轉換,也就是星形跟三角形轉換。 這是一份筆者常常使用的小工具,用來快速調整Y接或Δ接馬達設計變換時,線圈繞線條件的更改;但作為馬達設計者而言,是絕不需要考慮的Δ接設計方案。主要是Δ接會在馬達的三
Thumbnail
直觀理解 導數:考慮的是單一變數的函數,描述的是函數在某點的斜率或變化率。 偏導數:考慮的是多變數函數,描述的是函數在某個變數變化時的變化率,其他變數保持不變。  (針對各維度的調整 或者稱變化 你要調多少) 應用 導數:在物理學中應用廣泛,例如描述速度和加速度。 偏導數:在多變量分析、優
Thumbnail
直觀理解 導數:考慮的是單一變數的函數,描述的是函數在某點的斜率或變化率。 偏導數:考慮的是多變數函數,描述的是函數在某個變數變化時的變化率,其他變數保持不變。  (針對各維度的調整 或者稱變化 你要調多少) 應用 導數:在物理學中應用廣泛,例如描述速度和加速度。 偏導數:在多變量分析、優
Thumbnail
左右手真的可以互通知覺嗎? 精選跟數學有關的搞笑諾貝爾獎!一起探究科學研究背後的數學原理! 《異想天開的有趣科學5:左手癢,抓右手也可以?》將帶你一探「幾何」圖形的魅力!
Thumbnail
左右手真的可以互通知覺嗎? 精選跟數學有關的搞笑諾貝爾獎!一起探究科學研究背後的數學原理! 《異想天開的有趣科學5:左手癢,抓右手也可以?》將帶你一探「幾何」圖形的魅力!
Thumbnail
這篇文章,會帶著大家複習以前學過的 區間DP框架, 並且以回文子字串、回文子序列的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 回文字串的基本定義 s = s[::-1] 也就是說字串s的正序 和 逆序完全相同。 回文字串的基本結構 空字串"
Thumbnail
這篇文章,會帶著大家複習以前學過的 區間DP框架, 並且以回文子字串、回文子序列的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 回文字串的基本定義 s = s[::-1] 也就是說字串s的正序 和 逆序完全相同。 回文字串的基本結構 空字串"
Thumbnail
題目敘述 題目給定我們一個輸入陣列nums 要求我們以正、負交叉排列的方式重組陣列,並且必須保持原本的相對順序。 並且以陣列的形式輸出返回答案。 例[5, 1, -2, -3] 重排後為 [5, -2, 1, -3] 題目的原文敘述 測試範例 Example 1: Input:
Thumbnail
題目敘述 題目給定我們一個輸入陣列nums 要求我們以正、負交叉排列的方式重組陣列,並且必須保持原本的相對順序。 並且以陣列的形式輸出返回答案。 例[5, 1, -2, -3] 重排後為 [5, -2, 1, -3] 題目的原文敘述 測試範例 Example 1: Input:
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News