海龜繪製斐波那契螺線

2022-01-11 16:01:35 字數 2885 閱讀 9418

1、利用**比例生成每一段螺線半徑的版本:

import turtle

from random import random

def draw_square(r):

turtle.fillcolor(random(), random(), random()) # random()函式返回0到1之間的隨機數字,rgb的三個引數在這裡採用0到1的模式

turtle.begin_fill() # 在繪製要填充的形狀之前呼叫

for _ in range(4):

turtle.fd(r) # 海龜前進引數指定的距離

turtle.left(90) # 海龜左轉90°

# 填充關鍵點,正方形填充一半就結束,然後立即開始圓形填充

if _ == 1:

turtle.end_fill() # 填充上次呼叫 begin_fill() 之後繪製的形狀

turtle.fillcolor(random(), random(), random())

turtle.begin_fill() # 在繪製要填充的形狀之前呼叫

turtle.circle(r, 90) # 這裡r是半徑,90指夾角是90°

turtle.end_fill()

return

if __name__ == '__main__':

# turtle.speed(0) # 設定繪圖速度為最快

# turtle.delay(0) # 設定延遲為0

# t = turtle.turtle()

# turtle.hideturtle() # 隱藏海龜

turtle.up() # 畫筆抬起

turtle.goto(-130, 50) # 前往這個座標

turtle.down() # 畫筆落下

turtle.pensize(3) # 設定線條粗細

# **比例

scale = 0.618

# 初始半徑

r = 50

for _ in range(5):

draw_square(r)

r /= scale

turtle.hideturtle()

# 貌似這兩個都是開始事件迴圈

turtle.done()

# turtle.mainloop()

效果:

2、半徑和斐波那契數列嚴格一致的版本:

import turtle

from random import random

def draw_square(r):

turtle.fillcolor(random(), random(), random()) # random()函式返回0到1之間的隨機數字,rgb的三個引數在這裡採用0到1的模式

turtle.begin_fill() # 在繪製要填充的形狀之前呼叫

for _ in range(4):

turtle.fd(r) # 海龜前進引數指定的距離

turtle.left(90) # 海龜左轉90°

# 填充關鍵點,正方形填充一半就結束,然後立即開始圓形填充

if _ == 1:

turtle.end_fill() # 填充上次呼叫 begin_fill() 之後繪製的形狀

turtle.fillcolor(random(), random(), random())

turtle.begin_fill() # 在繪製要填充的形狀之前呼叫

turtle.circle(r, 90) # 這裡r是半徑,90指夾角是90°

turtle.end_fill()

return

# 返回乙個fibonacci列表[1, 1, 2, 3, 5...]

def fibo(n):

f_1 = 1

f_2 = 1

fibo_list = [1, 1]

for i in range(n - 2):

fibo_num = f_1 + f_2

f_1, f_2 = f_2, fibo_num

return fibo_list

if __name__ == '__main__':

# turtle.speed(0) # 設定繪圖速度為最快

# turtle.delay(0) # 設定延遲為0

# t = turtle.turtle()

# turtle.hideturtle() # 隱藏海龜

turtle.up() # 畫筆抬起

turtle.goto(-130, 50) # 前往這個座標

turtle.down() # 畫筆落下

turtle.pensize(3) # 設定線條粗細

# **比例

scale = 0.618

# 初始半徑

r = 50

# 生成fibonacci列表

fibo_list = fibo(6) # 因為畫圖是從第二個數開始的,所以這裡要比下面的迴圈多生成乙個數

for _ in range(5):

draw_square(r * fibo_list[_ + 1])

turtle.hideturtle()

# 貌似這兩個都是開始事件迴圈

turtle.done()

# turtle.mainloop()

效果:

斐波那契數列 斐波那契數列python實現

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...

迴圈斐波那契數列 斐波那契數列應用

什麼是斐波那契數列 斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144 這個數列從第3項開始,每一項都等於前兩項之和 台階問題 有一段樓梯有10級台階,規定每一步只能跨一級或兩級,要登上第10級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...

斐波那契堆

以下是實現的程式 肯定可以再優化的。include include include include using namespace std class node delete m child m child null class fibonacciheap node insert int key v...