From 7170a413e34e7807f5ea896e78f1b48c815a2d8d Mon Sep 17 00:00:00 2001 From: joy Date: Tue, 4 Mar 2025 00:01:52 +0900 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20FiboPoint.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FiboPoint.py | 59 ++++++++++++++++++++-------------------------------- 1 file changed, 23 insertions(+), 36 deletions(-) diff --git a/FiboPoint.py b/FiboPoint.py index fb74e71..3162e0e 100644 --- a/FiboPoint.py +++ b/FiboPoint.py @@ -1,40 +1,27 @@ import numpy as np import matplotlib.pyplot as plt -def fibonacci_spiral(n): - # 費波那契數列 - fib = [0, 1] - for _ in range(n-1): - fib.append(fib[-1] + fib[-2]) - - # 初始化繪圖 - fig, ax = plt.subplots(figsize=(8, 8)) - ax.set_aspect('equal') - - # 繪製方塊和圓弧 - x, y = 0, 0 # 起始點 - dx, dy = 1, 0 # 初始方向 - for i in range(n): - size = fib[i] - ax.add_patch(plt.Rectangle((x, y), size * dx, size * dy, fill=False, edgecolor='black')) - - # 繪製圓弧(逆向) - theta = - #np.linspace((i + 1) * np.pi / 2, i * np.pi / 2, 100) #逆向 - #np.linspace(i * np.pi / 2, (i + 1) * np.pi / 2, 100) #正向 - arc_x = x + size * np.cos(theta) - arc_y = y + size * np.sin(theta) - ax.plot(arc_x, arc_y, 'b', linewidth=2) - - # 更新 (x, y) 和 (dx, dy) - x, y = x + size * dx, y + size * dy - dx, dy = dy, -dx # 逆時針旋轉 90° - #dx, dy = -dy, dx #順時針 - - ax.set_xlim(-fib[-1], fib[-1]) - ax.set_ylim(-fib[-1], fib[-1]) - plt.axis('off') - plt.show() +# 參數設定 +a = 1 # 初始半徑 +b = np.log((1 + np.sqrt(5)) / 2) / (np.pi / 2) # 黃金比例相關的 b 值 -# 繪製前 10 個費波那契螺旋 -fibonacci_spiral(10) +# 角度範圍 (0 到 4π 讓螺旋轉兩圈) +theta = np.linspace(0, 4 * np.pi, 1000) +r = a * np.exp(b * theta) + +# 轉換為笛卡爾座標 +x = r * np.cos(theta) +y = r * np.sin(theta) + +# 繪製黃金螺旋 +plt.figure(figsize=(6, 6)) +plt.plot(x, y, color='gold', linewidth=2) + +# 設定視圖範圍與標籤 +plt.axis('equal') # 保持比例 +plt.title("黃金螺旋 (Golden Spiral)", fontsize=14) +plt.xlabel("X") +plt.ylabel("Y") + +# 顯示圖像 +plt.show()