基因與生成元演算法

2021-10-22 12:00:34 字數 4765 閱讀 7904

本章繪圖要點:

生成元演算法:重複性的繪圖步驟可抽象提煉成資料,儲存在列表或元組裡,然後,依據抽象規則,讀取資料,呼叫繪圖函式,生成所需要的圖形,從而降低程式的複雜性,減少程式的**量。

繪圖效率:當圖形的資料計算量比較大時,可先統一計算,然後再繪圖,從而提高圖形的生成效率。

一生二,二生三

「道生一,一生二,二生三,三生萬物。

--《道德經》
為什麼相對少量的遺傳物質可以發育成複雜的結構,如肺、大腦、心臟?

為什麼只佔人體體積5%的血管能遍布人體的每一部分?

生命究竟是什麼?生命最初又是如何形成的?

基因存在於染色體上,負責對生命體的形態、結構、功能進行全方位的編碼,它所包含的資訊必定有限,然而如此有限的資訊又是如何準確地描述後代生命的性狀?

經典理論無法解釋自然界這些讓人困惑的問題,直到分形理論的出現,才讓這些問題有了乙個可能的答案。簡單而少量的規則是可以生成複雜結構的,自然界中的許多事物可以通過簡單步驟的無數次重複(也就是分形迭代)演化而成。

由乙個簡單的生成因子(分形理論中稱之為「生成元」),不斷迭代,自我進化,越來越複雜,以至於逐步出現山川、草木、動物、人類及人類的思維。宇宙間的一切難道都是這樣動態生成的嗎?聽起來不可思議,但或許這就是事實!

如果保持原形為一條直線,改變生成元,那麼多次迭代後,會生成乙個怎麼樣的圖形呢?

生成元1:

第一次迭代同生成元;

第二次迭代:

第三次迭代:

第六次迭代:

生成元2:

第一次迭代同生成元;

第二次迭代:

第三次迭代:

第四次迭代:

你可以嘗試設計不同的生成元,多次迭代後,看看會生成怎樣複雜的圖形。為了更清晰地顯示圖形的細微結構,示例程式畫筆的顏色選擇的是預設的黑色,你也可以選擇自己喜歡的單種或多種顏色,來生成更絢爛的圖形。

2.3 演算法

我們可以用乙個列表genu來指定生成元,例如科赫曲線的生成元可用列表gene = [0,60,-120,60,end]來表示:

列表的每個值表示了旋轉角的大小,正數是逆時針旋轉,負數是順時針旋轉。a點不旋轉,為0;c點逆時針旋轉60度,為60;d點順時針旋轉120,為-120;e點逆時針旋轉60,為60;end表示終止指定生成元(實際上它可以是任意值)。從一次旋轉到下次旋轉之間的距離是一定的,也就是說,ac、cd、de、eb的長度是相同的,都為ab的1/3。

除了生成元以外,我們還需要乙個縮小率ratio:下一次迭代的線段和原始線段的比率,也就是ac/ab,科赫曲線的這個比率我們知道就是1/3,約為0.3333。

生成元1 的生成元可用列表[-15,90,-150,90,end]來表示:

列表的每個值表示了旋轉角的大小,正數是逆時針旋轉,負數是順時針旋轉。a點順時針旋轉15,為-15;c點逆時針旋轉90度,為90;d點順時針旋轉150,為-150;e點逆時針旋轉90,為90;end表示終止指定生成元。 ac、cd、de、eb的長度是相同的。

ratio == 0.40824829046386296 ≈ 0.4082

生成元2 的生成元可用列表[0,90,-90,-90,90,-90,90,90,-90,end]來表示:

列表的每個值表示了旋轉角的大小,正數是逆時針旋轉,負數是順時針旋轉。生成元2 的縮小率為:

ratio = 1/5 = 0.2

下表為幾種曲線的生成元和縮小率:

科赫曲線

生成元1

生成元2

生成元gene

[0,60,-120,60,end]

[-15,90,-150,90,end]

[0,90,-90,-90,90,-90,90,90,-90,end]

縮小率ratio

1/3 ≈ 0.3333

0.4082

1/5 = 0.2

原始碼複製**

import turtle

def restore§:

turtle.penup()

turtle.setpos(p[0],p[1])

turtle.pendown()

turtle.seth(p[2])

def get_point():

x,y = turtle.pos()

d = turtle.heading()

return (x,y,d)

if n == 1:

# 繪製圖形

restore(a)

for p in points:

turtle.setpos(p[0],p[1])

else:

# 遞迴呼叫生成器,使用生成元替換中間線段

i = 0

while i ifname== 『main』:

# 隱藏畫筆形狀

turtle.hideturtle()

# 指定畫筆的速度,引數speed為0到10之間的乙個整數,1最慢,10最快

turtle.speed(9)

# 指定畫筆大小

turtle.pensize(1)

# 設定顏色模式為rgb

turtle.colormode(255)

# 背景顏色為青色,畫筆顏色為白色

b_color = (136,168,155)

p_color = 『white』

# 設定背景顏色

# 原形為一條直線

a = (-450,0,0)

b = (450,0,0)

l = 900

# 獲取使用者輸入的生成元、縮小率、迭代次數

print('生成元:')

gene = input().split(',')

print('縮小率:')

ratio = float(input())

print('迭代次數:')

n = int(input())

# 生成圖形

restore(a)

generator(a,b,l,gene,ratio,n)

複製**

生成元1彩圖1(青色rgb(136,168,155) /白色)

生成元1彩圖2(背景色rgb(224,225,227),畫筆色rgb(176,186,175))

生成元1彩圖3(背景色rgb(181,138,93),畫筆色rgb(214,226,206))

資料視覺化tips

配色方案

在資訊視覺化設計中,配色是設計繞不開的環節,配色方案直接關係到視覺化結果的資訊表達和易讀性。和諧的配色方案,可以增加視覺化結果的美觀性,讓使用者更有興趣去探索視覺化所包含的資訊,而不恰當的配色方案,則會造成使用者對視覺化的牴觸。在設計配色方案時,通常需要考慮到很多因素,比如:需要視覺化的資料是什麼樣的型別?這些資料擁有哪些定性或定量的屬性?將這些資料視覺化的目的是什麼?所面向的是怎樣的使用者群體?等等。

中國古典配色:中國的色彩理念融合了自然、宇宙、倫理、哲學等觀念,其色系以天然植物、動物、礦物作為色彩原料,這些來自於大自然的顏色,色彩範圍廣,溫潤柔和,獨具魅力。瓷器、國畫、壁畫、服飾、建築等等,都是學習、臨摹古典配色的優秀素材。

世界名畫:畫家對色彩都有自己獨特且敏銳的理解,層次的渲染、明暗的對比,優秀的畫作必定有著優秀的配色方案。

經典影視劇:經典影視劇的每一幀都是一副畫作,配色考究,製作精良。

最小生成元 java

如果x加上x的各個位數字之和得到y,就說x是y的生成元 給出n,1 n 100000 求最小生成元。無解輸出0.例如,n 216,121,2005時的解分別為198,0,1979。198 1 9 8 216 1979 1 9 7 9 2005 我的思路如下 1.從0找到n所有的數字 2.將這些數字轉...

求解最小生成元

前言 因為看著劉汝佳的演算法書學習的演算法,今天聊聊最小生成元,關於這一點我覺得書上的方法有些不妥,因為就拿出來說說,這個演算法相對還是比較簡單的。最小生成元問題描述 如果x加上x的各個位數字之和得到y,就說x是y的生成元 給出n,1 n 100000 求最小生成元。無解輸出0。例如,n 216,1...

競賽演算法第二版 生成元

一 題目 如果x加上x的各個數字之和得到y,就說x是y的生成元。給出n 1 n 100000 求最小生成元。無解輸出0。例如,n 216,121,2005時的解分別為198,0,1979。二 分析 可以把 x和y儲存成乙個陣列,如a x y 通過搜尋陣列就可以得到結果 三 include inclu...