--- title: 【數學理論】 05. 路燈下的自然之美 — 等角螺線(Logarithmic Spiral) tags: - 【數學理論】 url: https://hackmd.io/S0TOBZKLS8WBUmj8W4Ekqw lastSync: 2025-05-25T08:45:42.569Z hackmd: url: https://hackmd.io/S0TOBZKLS8WBUmj8W4Ekqw title: 【數學理論】 05. 路燈下的自然之美 — 等角螺線(Logarithmic Spiral) lastSync: 2025-05-25T08:51:53.126Z --- 路燈下的自然之美 === <font size=4><font color=gray>等角螺線(Logarithmic Spiral)</font><br></font><br> --- <!-- 20250524 --> 按照慣例,開頭先來說一個故事。 <br> 以前我會帶著當時的女友到淡水的漁人碼頭走走,尤其到傍晚時,會看到光亮的燈在波光粼粼的淡水河上閃爍,特別美麗。 <img src="https://hackmd.io/_uploads/rysILicrJe.jpg" alt="圖片描述" style="display: block; margin: 0 auto;" width="500"> > <font size=1><font color=gray>右邊那位是我沒錯</font></font> <br> 走過情人橋有一整條觀景的地方,有椅子可以坐著休息,上次就是去沙崙夜市買東西,到這邊吃。 <br> 一邊看夜景,一邊享受美食時,不免讓我注意到上方的路燈,有幾隻小昆蟲圍繞著燈飛。接著往其他路燈看,會發現整排路燈下都有小蟲在飛。 <br> 我忍不住好奇:**「為什麼路燈下會有小蟲在飛?」** <br> # <font size=5>**昆蟲的趨光性**</font><br> 我想很多人第一時間就想得到答案:「因為有些昆蟲有趨光性」 <br> 是的沒錯,但是為什麼會有趨光性昆蟲?仔細想想這其實是很詭異的地方,畢竟有個成語就叫做「飛蛾撲火」,為什麼飛蛾活得好端端的要往火源撲過去? <br> 「飛蛾撲火」這個成語最早可以追溯到南朝的《梁書.卷四○.到溉傳》,當中提到:「**如飛蛾之赴火,豈焚身之可吝。**」,意思是:「就像飛蛾撲向火源一樣,就算焚燒自我,也再所不惜。」 <br> 這個自然現象被解釋成文人雅士優雅卻壯烈的偉大情操,可再多文人雅士為了五斗米折腰,也無法解釋飛蛾撲火的原因。 <br> 退一步講,世界上最大也最直接的光源是太陽,如果這樣那趨光性昆蟲不就都會往太陽方向飛? <br> 廣大的PTT鄉民們也有一樣的疑問,我們來看看他們是怎麼回答的。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/01.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="600"> > <font size=1><font color=gray>photo credit by: https://tw.news.yahoo.com/%E8%B6%A8%E5%85%89%E6%80%A7%E6%98%86%E8%9F%B2%E4%B8%8D%E6%9C%83%E5%BE%80%E5%A4%AA%E9%99%BD%E9%A3%9B-%E7%A5%9E%E4%BA%BA%E6%8F%AD%E7%9C%9F%E7%9B%B8-122522726.html</font></font> 「因為他們夜行性吧」、「那為什麼不會飛向月亮」、「你覺得有這種昆蟲他還不滅亡嗎」、「最好飛得上去」、「蟲:我看起來像火箭嗎」、「太陽從東邊升起西邊落下,蟲蟲跟不上」、「蟲:飛過,但累了」、「夸父:你在說我?」、「蟲:我看起來像智障嗎?」。 <br> 套用劉慈欣著名的小說《**三體Ⅱ:黑暗森林**》提及的:「生存是文明的第一需要。」,雖然在人類的觀察下來昆蟲並沒有文明,但他們也不會自取滅亡。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/02.jpg" alt="圖片描述" style="display: block; margin: 0 auto;" width="400"> > <font size=1><font color=gray>photo credit by: https://tw.buy.yahoo.com/gdsale/YS0402X-11246433.html</font></font> <br> <br> 事實上昆蟲並沒有這麼笨,甚至遠比我們想的還要強大。這涉及到昆蟲在夜間飛行時的特異功能。 <br> 試想一個問題:「當你蒙著眼或是在黑暗的環境要你直線走路,有可能嗎?」 <br> 網路上有很多實驗,事實上蒙著眼或是在黑暗的環境走路或是騎車,都不太可能走一直線,明明受試者覺得自己正在走直線,但摘下眼罩的結果是他們往旁邊拐了好大一個彎。 <br> 可以參考以下這個影片: {%youtube bwByeP5V9dM %} > <font size=1><font color=gray>video credit by: 蒙眼真的走不了直线吗?今天我们分别用走路和骑车挑战一下!channel: 这不科学啊</font></font> > <br> 德國科學家簡·索曼(Jan Souman)認為在缺乏外部參照物的情況下,人在走路時無法修正我們偏離的路徑,因此無法維持走一直線,而是習慣性地繞圈。而事實正是如此。 <br> 有一篇專門研究電腦圖象的期刊IEEE Transactions on visualization and computer graphics (2023 Impact Factor: 4.3),當中有一篇論文[1]提到,可以讓受試者頭戴VR頭盔,利用眼前出現的畫面重新定向,讓受試者雖然走的是曲線,但眼睛看到的卻是直線,如下圖: <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/04.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="600"> > <font size=1><font color=gray>photo credit by: https://www.computer.org/csdl/journal/tg/2010/01/ttg2010010017/13rRUxZ0o1t</font></font> > <br> <br> 可以看到當眼睛看到的是直線(virtual direction),但實際走的路線卻是曲線(real curve),可見周圍的參照物對於判別方向非常重要。 <br> 當然昆蟲亦是如此,只要沒有外部參照物來修正自己的軌跡,就很難往前飛一直線。 <br> 但在夜晚視線不佳的情況下,昆蟲是用何種東西當參照物呢? <br> 就是**月光**。 <br> 在幾億萬年的演化下來,昆蟲在夜間飛行時的特異功能就是利用**月光**。 <br> 月球距離地球大約 **38 萬公里**,所以對於地球上的昆蟲來說,月光的光線可說是以平行的方式來到地球。因為是平行光,所以不管在地面的哪個位置,月光對於昆蟲來說就是**以同一個角度來到夜行性昆蟲的眼睛**,因此只要保持這個角度,就可以直線飛行。 <br> <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/05.jpg" alt="圖片描述" style="display: block; margin: 0 auto;" width="600"> <br> 當然在沒有光害的時期,月光是個很好的參照物,在這個導航系統已經刻進昆蟲的基因裡不知道多久之後,人類已知用火了。 <br> <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/06.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="600"> > <font size=1><font color=gray>photo credit by: https://today.line.me/tw/v2/article/51PxoM</font></font> <br> 自人類已知用火開始堪稱昆蟲的災難,從此之後月光不再是唯一的參照物,火源、光源的亮度相較於微弱的月光那不是一個檔次的,從根本上來說就是對月光實施降維打擊。這不光是擾亂昆蟲的導航系統,甚至造成飛蛾撲火的結果,歸因於昆蟲仰賴「平行光源」這個Bug。 <br> 我們都知道,光是呈放射狀從光源向外擴散,因此光線的排列不再像月光一樣是平行的,而是放射成**一個圓**。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/07.jpg" alt="圖片描述" style="display: block; margin: 0 auto;" width="400"> >上圖只是示意,只有畫八道光束,事實上光源會發射無數條光線形成一個球體,投影到二維平面上會是一個**圓形**。 <br> 但是昆蟲不知道這件事,他只知道他賴以維生的夜間導航系統是飛行時利用與光呈現固定夾角,因此當他開始以放射狀的光源當作參照物時,他的**飛行軌跡**就會變成這樣。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/08.jpg" alt="圖片描述" style="display: block; margin: 0 auto;" width="400"> <br> 可以看到軌跡相對於每道光線都呈現同一夾角,但這樣的飛行軌跡卻會讓昆蟲往光源的中心飛去,最後落到火源中,下面動圖可以看得更明顯。 <br> <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/09.gif" alt="圖片描述" style="display: block; margin: 0 auto;" width="400"> <br> 現在放射光只有八條線,但我們都知道放射光的線無限多條,因此我們可以利用**飛行軌跡上每一條通過極點(中心點)的直線,都會和飛行軌跡構成完全相等的交角**的特性,將極座標公式用以下程式繪製出來,就會發現飛蛾飛行的軌跡會趨近於一種螺旋曲線。 <br> :::spoiler 點擊以查看程式碼 ```python= import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation, PillowWriter from matplotlib.patches import Arrow plt.rcParams['font.sans-serif'] = ['Arial Unicode MS', 'Microsoft YaHei', 'SimHei', 'sans-serif'] plt.rcParams['axes.unicode_minus'] = False class PolarMotionVisualizer: def __init__(self): # 設置canvus和subplot self.fig, self.ax = plt.subplots(figsize=(10, 10)) self.ax.set_xlim(-5, 5) self.ax.set_ylim(-5, 5) self.ax.grid(True) self.ax.set_aspect('equal') self.ax.axhline(y=0, color='k', linestyle='-', alpha=0.3) self.ax.axvline(x=0, color='k', linestyle='-', alpha=0.3) # 設定起始參數 self.theta = 0 self.r = 4.2 self.dt = 0.08 self.dr = -0.025 # 初始化 plot elements self.point, = self.ax.plot([], [], 'bo', markersize=10) self.radius_line, = self.ax.plot([], [], 'b-', alpha=0.5) self.dr_arrow = None self.rdtheta_arrow = None self.trajectory, = self.ax.plot([], [], 'r--', alpha=0.3) # 儲存軌跡點 self.trajectory_x = [] self.trajectory_y = [] def update(self, frame): if self.r <= 0.05: return self.point, self.radius_line, self.trajectory # 更新點的位置 x = self.r * np.cos(self.theta) y = self.r * np.sin(self.theta) # 更新點和半徑線 self.point.set_data([x], [y]) self.radius_line.set_data([0, x], [0, y]) # 計算dr和rdθ向量 if self.dr_arrow: self.dr_arrow.remove() if self.rdtheta_arrow: self.rdtheta_arrow.remove() # 徑向位移向量 (dr) dr_x = self.dr * np.cos(self.theta) dr_y = self.dr * np.sin(self.theta) self.dr_arrow = Arrow(x, y, dr_x, dr_y, width=0.2, color='green', alpha=0.7) # 切向位移向量 (rdθ) rdtheta = self.r * self.dt rdtheta_x = -rdtheta * np.sin(self.theta) rdtheta_y = rdtheta * np.cos(self.theta) self.rdtheta_arrow = Arrow(x, y, rdtheta_x, rdtheta_y, width=0.2, color='purple', alpha=0.7) # 添加箭頭到圖中 self.ax.add_patch(self.dr_arrow) self.ax.add_patch(self.rdtheta_arrow) # 更新軌跡 self.trajectory_x.append(x) self.trajectory_y.append(y) self.trajectory.set_data(self.trajectory_x, self.trajectory_y) # 更新角度和半徑 self.theta += self.dt self.r += self.dr # 添加Title plt.title(f'Polar Coordinate Motion\nθ = {self.theta:.2f}, r = {self.r:.2f}') return (self.point, self.radius_line, self.dr_arrow, self.rdtheta_arrow, self.trajectory) def save_animation(self, filename='polar_motion.gif'): # 添加圖例 self.ax.plot([], [], 'b-', label='Radial Vector (r)') self.ax.plot([], [], 'g-', label='Radial Displacement (dr)') self.ax.plot([], [], 'purple', label='Tangential Displacement (rdθ)') self.ax.plot([], [], 'r--', label='Motion Trajectory') self.ax.legend() # 計算所需的Frames frames_needed = max(1, int((self.r - 0.05) / abs(self.dr))) # from r=5.5 to r=0.05 # 建立動畫 anim = FuncAnimation(self.fig, self.update, frames=frames_needed, interval=50, blit=True) # 存成 GIF writer = PillowWriter(fps=20) anim.save(filename, writer=writer) plt.close() # 儲存GIF viz = PolarMotionVisualizer() viz.save_animation() ``` ::: <br> 藉由上面的程式,我們就能獲得以下的螺線,而由於這種螺旋每一條通過極點(中心點)的直線,都會和螺線構成完全相等的交角,因此這個螺線就有一個名詞:**等角螺線**。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/10.gif" alt="圖片描述" style="display: block; margin: 0 auto;" width="500"> <br> # <font size=5>等角螺線</font><br> 等角螺線(Equiangular Spiral),又稱為對數螺線(Logarithmic Spiral),是一種特殊的曲線,特徵是在每個點上,曲線與原點的連線都保持一個固定的角度。這條曲線的形狀在自然界中經常出現,如貝殼、颶風、星系的旋臂等。 <br> 瑞士數學家雅各布·伯努利(Jacob Bernoulli)對等角螺線進行了深入研究,並稱其為「Spira Mirabilis」(奇妙的螺線)。他對這種螺線的對稱性和自相似性著迷,甚至要求將它刻在他的墓碑上,下圖可以看到,墓碑最底下就是**等角螺線**。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/11.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="400"> > <font size=1><font color=gray>photo credit by: https://mathshistory.st-andrews.ac.uk/Extras/Bernoulli_tomb/</font></font> <br> <br> 接下來我們做一些簡單的數學推導,看看為什麼等角螺線的圖形會長那樣。 <br> ## 等角螺線的極座標方程推導 等角螺線的特性是:**曲線上任一點的切線與徑向向量之間的夾角為固定值 $\phi$**。透過這一幾何性質,我們可以推導出其極座標表達式。 --- ### 1. 極坐標中的切線關係 首先,我們再看一次等角螺線的圖: <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/10.gif" alt="圖片描述" style="display: block; margin: 0 auto;" width="500"> >~~容許我再放一次這張圖,因為我程式寫很久~~ <br> 可以透過上圖看到這是在極座標系統,接著讓我們圖中分析一個曲線上的點移動時的幾何關係。 <br> 考慮一個點 $P$ (就是動圖的<font color=blue>藍色圓點</font>) 在曲線上移動時,我們會發現: 在任意時刻,點 $P$ 有一個位置向量(極徑)$r$ 當點移動時,會產生兩個微小位移: - 徑向位移 $dr$(沿著徑向方向,也就是法線方向位移) - 切向位移 $rdθ$(垂直於徑向方向,也就是切線方向位移) - 這裡的 $rdθ$ 是因為在極座標中,切向位移的長度是半徑 r 乘以角度變化 $dθ$ <br> 那根據三角函數定義,我們都知道: $$ \tan(\theta) = \frac{切線方向位移}{法線方向位移} $$ 而在極坐標中,等角螺線的切線與徑向向量之間的夾角為固定值 $\phi$,所以我們可以得到: $$ \tan(\phi) = r\frac{d\theta}{dr} $$ 其中: - $r$ 是極徑 - $\frac{d\theta}{dr}$ 是極角對極徑的變化率 - $\phi$ 是切線與徑向向量的固定夾角 <br> 重整公式得微分方程: $$ \frac{dr}{r} = \frac{1}{\tan(\phi)} \cdot d\theta $$ --- ### 2. 微分方程 接下來解這個微分方程,令 $b = \frac{1}{\tan(\phi)}$(常數),對上述方程兩邊積分: $$ \int \frac{dr}{r} = \int b \, d\theta $$ 積分結果: $$ \ln|r| = b\theta + C $$ 其中 $C$ 是積分常數。 --- ### 3. 對數形式轉為指數形式 將上面的積分結果取指數,可以得到: $$ r = e^{b\theta + C} = e^C \cdot e^{b\theta} $$ 令 $a = e^C$(正的常數),則等角螺線的極座標方程為: $$ r = a \cdot e^{b\theta} $$ 其中: - $a$ 決定了曲線的大小 - $b$ 決定了曲線的緊密程度 --- ## 結論 因此我們可以得到等角螺線的極座標公式為: $$ r = a \cdot e^{b\theta} $$ 這個方程具有以下性質: 1. 極徑 $r$ 隨著 $\theta$ 的增加呈指數變化 2. $b$ 的正負決定螺線是向外擴張還是向內收縮 3. 當 $\theta$ 增加 $2\pi$ 時,$r$ 增加一個固定的倍數 $e^{2\pi b}$ <br> 這個推導過程直接反映了等角螺線的幾何性質,即曲線與徑向向量保持固定角度的特性。 --- 現在我們來看看等角螺線的極座標公式: $$ r = a \cdot e^{b\theta} $$ <br> 這時你會發現, $e$ 又出現了,這是因為等角螺線具有連續增長或衰退的特性,因此以 $e$ 作為極座標方程式的底數來表示等角螺線的特性絕對是再適合不過了,另外在前面推導極坐標公式的時候也會發現, $e$ 在推導過程中很自然就出現了。對於 $e$ 的介紹詳細可以參考[**這篇**](https://hackmd.io/@lewisjjj800/rJSmqLxfxe) 。 <br> 下圖完美展示了等角螺線的特性,隨著曲線旋轉,與原點的距離呈指數式變化,但與原點的連線始終保持相同的角度。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/12.gif" alt="圖片描述" style="display: block; margin: 0 auto;" width="300"> > <font size=1><font color=gray>photo credit by: https://commons.wikimedia.org/wiki/File:Animated_log_spiral.gif</font></font> <br> 並且可以發現等角螺線是**自相似的**,代表無論把等角螺線放大到多大或是縮小到多小,你看到的形狀都是相似的。 <br> 或許有人可能會覺得,這個螺線到底有什麼用?但其實等角螺線的特性和美感,不僅吸引了數學家,也在自然科學、藝術設計和工程技術中發揮了重要作用。接下來讓我從幾個不同領域中等角螺線的存在與意義。 --- ## 自然界中的等角螺線 ### **生物學中的應用** 等角螺線在自然界的頻繁出現並非巧合,其結構背後蘊含著數學和物理的原理。 - **貝殼的生成**:海洋生物的貝殼通常以等角螺線的方式生長,這樣的形狀可以讓貝殼隨著生物體的成長以等比例擴展,節省能量和材料。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/13.jpg" alt="圖片描述" style="display: block; margin: 0 auto;" width="400"> > <font size=1><font color=gray>photo credit by: https://earthsky.org/human-world/nautilus-shell-fibonacci-logarithmic-spiral-golden-spiral/</font></font> <br> - **植物螺旋排列**:向日葵種子的分布、松果鱗片排列等現象中,等角螺線的結構有助於達到密集排列與資源利用的最優化。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/14.jpg" alt="圖片描述" style="display: block; margin: 0 auto;" width="400"> > <font size=1><font color=gray>photo credit by: https://ladailypost.com/amateur-naturalist-the-mathematics-of-sunflowers/</font></font> <br> ### **氣象與天文現象** 等角螺線也在大型自然現象中展現其特徵。 - **颶風和氣旋**:颶風的雲層結構經常呈現等角螺線的形狀,這是氣流和地球自轉相互作用的結果。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/15.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="600"> > <font size=1><font color=gray>photo credit by: https://www.researchgate.net/figure/Example-of-a-5-degree-log-spiral-field-vector-field-Black-lines-represent-two-spirals_fig6_266487599</font></font> <br> - **星系旋臂**:螺旋星系(如銀河系)的旋臂是典型的等角螺線,這種分佈是由引力作用和物質運動所產生的。 <img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/05/16.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="400"> > <font size=1><font color=gray>photo credit by: https://www.researchgate.net/figure/A-spiral-galaxy-with-an-overlaid-double-armed-logarithmic-spiral-Parameters-given-see_fig1_334491176</font></font> <br> --- <br> 現在,你已經了解**等角螺線**無處不在,小至貝殼、大至星系,最後讓我展現我自己在颱風天時,在我家樓下拍攝的「**飛蛾撲火**」 <div style="padding:75% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/1042851630?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="ffc17980-5729-4e74-9132-c59c0e471d26"></iframe></div><script src="https://player.vimeo.com/api/player.js"></script> <br> 下次走在路上時,不要忘了抬起頭看看路燈下的自然之美,同時也不要忘了想起這篇專欄,畢竟他正在用生命舞出自然界最美妙的軌跡。 <br> 我是Lewis,我們[**下一篇**](https://hackmd.io/@lewisjjj800/B1a1dQlfgg)專欄見! --- # <font size=5>參考資料</font> - [1] Steinicke, F., Bruder, G., Jerald, J., Frenz, H., & Lappe, M. (2009). Estimation of detection thresholds for redirected walking techniques. IEEE transactions on visualization and computer graphics, 16(1), 17-27.