更新 Fibo.py
This commit is contained in:
parent
5e4c39b3ad
commit
cd1b1748d4
68
Fibo.py
68
Fibo.py
@ -1,50 +1,36 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
def fibonacci_spiral(N=10):
|
||||
""" 繪製費波那契螺旋圖 """
|
||||
def fibonacci_spiral(n):
|
||||
"""繪製費波那契螺旋"""
|
||||
golden_ratio = (1 + np.sqrt(5)) / 2
|
||||
theta = np.linspace(0, n * np.pi / 2, 1000)
|
||||
r = golden_ratio ** (theta / (np.pi / 2))
|
||||
|
||||
# 計算前 N 個費波那契數
|
||||
F = [1, 1]
|
||||
for i in range(2, N):
|
||||
F.append(F[i-1] + F[i-2])
|
||||
|
||||
# 設定方向向量 (右、上、左、下)
|
||||
directions = [(1, 0), (0, 1), (-1, 0), (0, -1)]
|
||||
x = r * np.cos(theta)
|
||||
y = r * np.sin(theta)
|
||||
|
||||
pos = np.array([0, 0]) # 初始位置
|
||||
theta = np.linspace(0, np.pi/2, 20) # 角度範圍 (畫四分之一圓)
|
||||
plt.figure(figsize=(8, 8))
|
||||
plt.plot(x, y, color='gold', linewidth=2)
|
||||
|
||||
fig, ax = plt.subplots(figsize=(8, 8))
|
||||
ax.set_aspect('equal')
|
||||
# 增加方格來顯示費波那契數列
|
||||
a, b = 1, 1
|
||||
x, y = 0, 0
|
||||
angle = 0
|
||||
for _ in range(n):
|
||||
plt.gca().add_patch(plt.Rectangle((x, y), a, a, fill=False, edgecolor='blue', linewidth=1.5))
|
||||
x_new = x + a * np.cos(angle)
|
||||
y_new = y + a * np.sin(angle)
|
||||
a, b = b, a + b
|
||||
angle -= np.pi / 2
|
||||
x, y = x_new, y_new
|
||||
|
||||
# 繪製正方形與四分之一圓
|
||||
for i in range(N):
|
||||
dir_idx = i % 4
|
||||
dir_vec = np.array(directions[dir_idx]) # 取得方向向量
|
||||
size = F[i]
|
||||
|
||||
# 畫正方形
|
||||
square = plt.Rectangle(pos, size, size, fill=False, edgecolor='black', linewidth=1.5)
|
||||
ax.add_patch(square)
|
||||
|
||||
# 計算四分之一圓的中心點
|
||||
center = pos + dir_vec * size
|
||||
|
||||
# 畫四分之一圓弧
|
||||
arc_x = center[0] + size * np.cos(theta + dir_idx * np.pi / 2)
|
||||
arc_y = center[1] + size * np.sin(theta + dir_idx * np.pi / 2)
|
||||
ax.plot(arc_x, arc_y, 'b', linewidth=2)
|
||||
|
||||
# 更新下一個正方形的位置
|
||||
pos = pos + dir_vec * size
|
||||
|
||||
# 設定圖表範圍
|
||||
ax.set_xlim(-F[-2], sum(F))
|
||||
ax.set_ylim(-F[-2], sum(F))
|
||||
plt.axis('off') # 隱藏軸
|
||||
plt.title("Fibonacci Spiral")
|
||||
plt.xlim([-b, b])
|
||||
plt.ylim([-b, b])
|
||||
plt.axis('equal')
|
||||
plt.axis('off')
|
||||
plt.title("Fibonacci Spiral", fontsize=14)
|
||||
plt.show()
|
||||
|
||||
# 執行函數來繪製圖形
|
||||
fibonacci_spiral(N=10)
|
||||
# 繪製前10個費波那契數的螺旋
|
||||
fibonacci_spiral(10)
|
||||
Loading…
x
Reference in New Issue
Block a user