Scratch程式設計畫分形圖系列90:勾股定理、方根螺旋與畢達哥拉斯樹
前面我們畫過了與畢達哥拉斯樹相關的康拓塵埃環繞,本次就畢達哥拉斯樹有關的課題做一些探讨。包括勾股定理、無理數擴充、平方根螺旋以及幾種典型的畢達哥拉斯樹分形圖的Scratch畫法。
【畢達哥拉斯(勾股)定理】
畢達哥拉斯于公元前 5 世紀初去世,在他同時代的人以及後來甚至亞裡士多德看來,他是意大利南部一個宗教兄弟會的創始人。在公元前 6 世紀,畢達哥拉斯學派在那裡發揮了政治作用。然而,将他的名字與畢達哥拉斯定理聯系起來是相當近期且沒有根據的。事實上,這個定理在畢達哥拉斯在世之前很久就為人所知了,比如我們的勾股定理。
【正方形的邊與對角線的不可公度性】
一項歸功于畢達哥拉斯或者他的學派的重要發現,在于正方形的邊與對角線不可公度性,說人話,就是正方形的對角線與邊的比值不等于兩個整數的比值(即有理數)。
發現正方形的對角線與邊的比值不等于兩個整數的比值,這就産生了将數系擴充到無理數的必要性。下面截圖給出機關正方形中對角線的長度是無理數的證明。
正方形的邊與對角線的不可公度性證明截圖
【平方根螺旋】
平方根的計算是一個相關問題,并且激發了數學家們去發現一些奇妙的幾何構造。其中之一允許我們為任何整數n構造 .
它可以被稱為平方根螺旋,并且它是一個幾何回報回路。下圖解釋了這個想法。産生畢達哥拉斯樹家族及其相關圖形的構造與平方根螺旋的構造密切相關。該構造按照以下步驟進行,平方根螺旋如圖所示。
平方根螺旋。
平方根螺旋的建構。我們從一個直角三角形開始,使得構成直角的兩條邊長度為 1。那麼斜邊的長度為:
現在我們繼續建構另一個直角三角形,使得與直角相鄰的兩條邊長度為 1,并且那個三角形的斜邊長度為
……,以此類推。
【模拟尺規作圖畫平方根螺旋】
Scratch程式設計畫平方根螺旋的程式截圖和結果圖:
這個程式相當于尺規作圖畫出了方根螺旋,并給出了計算正整數的平方根的近似值的方法,近似值放在一個清單内。畫方根螺旋主程式:
畫出的逆時針方向旋轉的方根螺旋:
【畢達哥拉斯樹的建構】
構造分步示意圖:
這個等腰直角三角形構造的畢達哥拉斯樹:
算法分析:
步驟 1:畫一個正方形。
步驟 2:沿着其斜邊在正方形的一條邊上附加一個直角三角形(這裡是有兩條相等邊的直角三角形)。
步驟 3:沿着三角形的自由邊附加兩個正方形。
步驟 4:附加兩個直角三角形。
步驟 5:附加四個正方形。
步驟 6:附加四個直角三角形。
步驟 7:附加八個正方形。
遞歸子程式疊代示意圖:
遞歸子程式疊代示意圖
畫畢達哥拉斯樹的程式截圖:
畫畢達哥拉斯樹的程式截圖
【改變方向的畢達哥拉斯樹】
一旦我們了解了這個基本構造,我們就可以以各種方式對其進行修改,得出畢達哥拉斯分形樹的一些變種。例如,我們在這個過程中附加的直角三角形不一定是等腰三角形。它們可以是任何直角三角形。但是一旦我們允許這樣的變化,實際上我們就有了一個額外的自由度。一個内角為29度的直角三角形的螺旋狀葉子:
内角為29度的直角三角形的螺旋狀葉子
直角三角形總是可以以相同的方向連接配接,如下圖的右側的構造;我們也可以在每一步之後翻轉它們的方向,例如下圖 左側展示了這種可能性。
下圖展示了這些構造在大約 50 步之後的結果。非常值得注意的是,我們唯一改變的隻是三角形的方向,而不是它們的大小。然而,結果看起來卻截然不同。在第一種情況下,我們看到一種螺旋狀的葉子,而第二種情況讓我們想起蕨類植物或松樹。
請注意,在下圖左部的構造中,我們看到一個主要的莖,從它上面以右、左、右、左…… 的模式分出分支。在右半部的另一種構造中,這似乎非常不同。在那裡,我們看到一個卷曲的主要莖,并且我們隻有向一側分出的分支。你會猜到這兩種 “植物” 都源自相同的回報原理嗎?一開始它們看起來難道不像屬于完全不同的家族嗎?
然而,它們是非常親近的親屬,當分析相應的構造過程時,這一點就變得很明顯。這是分形可以幫助将新工具引入植物學的一種方式。生物學家阿裡斯蒂德・林登邁爾(1925 - 1989)沿着這些思路引入了 L 系統的概念。 我們正是利用L系統的思想編寫了相應的遞歸程式。
兩種不同連接配接方向的畢達哥拉斯樹
上圖中的兩種構造進行進行了大約 50 次疊代。請注意,在兩種構造中三角形的大小是相同的,隻是兩次疊代之間的連接配接方向不同。
Scratch程式設計畫畢達哥拉斯樹的程式設計實作:
要實作左邊的構造方式,即每一級翻轉一次方向,隻需在遞歸程式中,将調用的自定義子產品的參數由θ換成90-θ即可。如下圖的黑色虛線雙箭頭所示。
為了把這種像蕨類的樹畫得更“長”一些,我們把起點放在舞台左側中間的适當位置,起始方向向下,即面向180度方向。
畫實心正方形形成的效果圖:
畫空心正方形形成的蕨類或者松樹狀的植物效果圖,:
【畢達哥拉斯樹的變種——西蘭花形狀的樹和周期平鋪】
讓我們繼續研究我們這個非常原始但又令人驚歎的構造,使用一些其他的修改。
想一想,我們為什麼不采用任意一種三角形呢?為了保持一定的規律性,我們應該采用相似的三角形。這為各種各樣迷人的形式打開了大門,從類似植物的形式到平鋪形式,誰知道還有什麼呢?甚至在後面的圖中,我們連接配接了非常特殊的等邊三角形,你會發現到這個構造變得具有周期性。
從等邊三角形過渡到角度大于 90° 的等腰三角形會帶來另一個驚喜 —— 一種類似西蘭花的形狀,可見下圖。這些構造提出了許多有趣的問題。什麼時候構造會導緻重疊?在這個過程中,三角形或正方形的邊長,依據用一個内角度數大于大于 90° 的等腰三角形進行構造,就形成了類似西蘭花的畢達哥拉斯樹。
對于等腰三角形構造,隻需在直角三角形構造的基礎上,做一些修改,後一個轉90度變為轉2θ,兩個邊長都變為r/2cosθ,遞歸子程式對比如下圖所示。
等腰三角形構造的程式變化
類似西蘭花的畢達哥拉斯樹分形:
類似西蘭花的畢達哥拉斯樹分形1
類似西蘭花的畢達哥拉斯樹分形2
“類似西蘭花的畢達哥拉斯樹” 是通過使用角度大于 90° 的等腰三角形進行構造的。
這種構造方式可能會産生獨特的視覺效果和幾何結構。由于等腰三角形的特殊角度,在建構過程中可能會形成複雜而有趣的圖案。
在構造過程中,可以先确定一個初始的等腰三角形,然後根據特定的規則不斷添加新的等腰三角形,逐漸建構出類似西蘭花形狀的結構。這個過程可能涉及到對三角形邊長、角度以及位置關系的精确計算和調整。
如果将直角三角形變為正三角形,那就形成了周期性平鋪:
周期性平鋪,
如果把長度r變小些,疊代更多次,你會發現,畫筆會在一個正六邊形的區域内,有很多重複動作,形成周期性的平鋪。
更多次的周期性平鋪
這種構造不僅在數學上具有一定的研究價值,還可以為藝術創作和設計提供靈感。例如,可以将其應用于平面設計、建築裝飾或數字藝術中,創造出獨特的視覺效果。
此外,通過對這種構造的研究,還可以深入了解等腰三角形的性質以及幾何圖形的組合和演變規律。它也可以作為一種教學工具,幫助學生更好地了解幾何概念和數學原理。
【拓展】如前面所說,把三角形推廣到一般情況,即非直角、非等腰如何?提示:使用正弦定理計算相應邊長,為了不讓圖形發散,兩銳角和要小于120度。
一般三角形構造算法示意圖
一般三角形再改變一下連接配接方向如何?注意起點位置要居中。