更新 FiboPoint.py
This commit is contained in:
parent
8aa00116b3
commit
7170a413e3
59
FiboPoint.py
59
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()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user