最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python學(xué)習(xí)Turtle庫(kù)畫(huà)對(duì)稱(chēng)勾股樹(shù)體會(huì)分形驚艷

 更新時(shí)間:2021年09月30日 17:35:31   作者:Hann Yang  
這篇文章主要為大家介紹了Python學(xué)習(xí)中如何使用Turtle庫(kù)畫(huà)對(duì)稱(chēng)勾股樹(shù),從而體會(huì)到分形世界的驚艷,文中附含詳細(xì)示例代碼有需要的朋友可以借鑒參考下

分形,具有以非整數(shù)維形式充填空間的形態(tài)特征。通常被定義為“一個(gè)粗糙或零碎的幾何形狀,可以分成數(shù)個(gè)部分,且每一部分都(至少近似地)是整體縮小后的形狀”,即具有自相似的性質(zhì)。分形(Fractal)一詞,是芒德勃羅創(chuàng)造出來(lái)的,其原意具有不規(guī)則、支離破碎等意義。1973年,芒德勃羅(B.B.Mandelbrot)在法蘭西學(xué)院講課時(shí),首次提出了分維和分形的設(shè)想。
分形是一個(gè)數(shù)學(xué)術(shù)語(yǔ),也是一套以分形特征為研究主題的數(shù)學(xué)理論。分形理論既是非線性科學(xué)的前沿和重要分支,又是一門(mén)新興的橫斷學(xué)科,是研究一類(lèi)現(xiàn)象特征的新的數(shù)學(xué)分科,相對(duì)于其幾何形態(tài),它與微分方程與動(dòng)力系統(tǒng)理論的聯(lián)系更為顯著。分形的自相似特征可以是統(tǒng)計(jì)自相似,構(gòu)成分形也不限于幾何形式,時(shí)間過(guò)程也可以,故而與鞅論關(guān)系密切。
分形幾何是一門(mén)以不規(guī)則幾何形態(tài)為研究對(duì)象的幾何學(xué)。由于不規(guī)則現(xiàn)象在自然界普遍存在,因此分形幾何學(xué)又被稱(chēng)為描述大自然的幾何學(xué)。分形幾何學(xué)建立以后,很快就引起了各個(gè)學(xué)科領(lǐng)域的關(guān)注。不僅在理論上,而且在實(shí)用上分形幾何都具有重要價(jià)值。

——摘自百度百科

自然界中的分形幾何 

 

人為的分形圖案

分形樹(shù)是分形幾何中的一小種類(lèi)型,一棵分形樹(shù)相當(dāng)于一棵“滿二叉樹(shù)”。通常都用遞歸來(lái)實(shí)現(xiàn),遞歸條件通常分兩派,一派是用長(zhǎng)度遞減,直到長(zhǎng)度不滿足某個(gè)條件時(shí)退出;另一派則是按層數(shù)來(lái)遞歸,相當(dāng)于“滿二叉樹(shù)”的層序遍歷。前一派的長(zhǎng)度遞歸相當(dāng)于“滿二叉樹(shù)”的先序遍歷,從根出發(fā)先左子樹(shù)后右子樹(shù),每一棵子樹(shù)都按這種“先根后左右”的順序遍歷。

舉個(gè)例子:

源代碼:

import turtle 
def bintree(size):
    angle = 60    # 分叉的角度
    if size > 5:    # 長(zhǎng)度退出條件
        turtle.forward(size)
        turtle.left(angle)
        bintree(size / 1.6)
        turtle.right(angle*2)
        bintree(size / 1.6)
        turtle.left(angle)
        turtle.backward(size)
def main():
    turtle.speed(0)
    turtle.hideturtle()
    turtle.penup()
    turtle.left(90)
    turtle.backward(100)
    turtle.showturtle()
    turtle.pendown()
    turtle.pensize(2)
    turtle.color('green')
    bintree(150)
    turtle.done() 
if __name__ == '__main__':
 
    main()

以上代碼中長(zhǎng)度以等比數(shù)列遞減,公比1/1.6;當(dāng)然也可以改成等差數(shù)列形式。此方式缺點(diǎn)樹(shù)的層數(shù)不能直接控制,需要用初始長(zhǎng)度、遞減公式和退出條件來(lái)計(jì)算得出。

勾股樹(shù),其實(shí)就是分形樹(shù)的一種,只是不像上例一樣簡(jiǎn)單地畫(huà)2個(gè)分叉,而是畫(huà)直角三角形加上各邊上的正方形,就像平面幾何中勾股定理證明時(shí)畫(huà)的示意圖。

以下是我用Turtle庫(kù)畫(huà)的一棵12層的對(duì)稱(chēng)勾股樹(shù),使用“層序遍歷”方式:

根據(jù)二叉樹(shù)的性質(zhì)可知:12層的樹(shù)會(huì)有 2^12 - 1 個(gè)正方形以及同樣數(shù)量的三角形。時(shí)間復(fù)雜度為指數(shù)級(jí),在關(guān)掉畫(huà)筆蹤跡開(kāi)關(guān)的情況下畫(huà)完此時(shí)耗時(shí)43秒。

簡(jiǎn)單點(diǎn),就用一個(gè)6層的來(lái)示意一下其“層序”的過(guò)程:

源代碼:

from turtle import *
 def Square(self,length):
    for _ in range(5):
        self.forward(length)
        self.right(90)
def Triangle(self,length):
    self.left(45)
    self.forward(length/2**0.5)
    self.right(90)
    self.forward(length/2**0.5)
    self.right(135)
    self.forward(length)
def Move2Right(self,length):
    self.back(length)
    self.right(45)
    self.forward(length/2**0.5)
    self.right(90) 
def Recursive(n, tracer, length):
    if n<1: return
    tracers = []
    for left in tracer:
        if n<3: left.pencolor('green')
        else: left.pencolor('brown')
        Square(left, length)
        Triangle(left, length)
        right = left.clone()
        left.right(45)
        Move2Right(right, length)
        tracers.append(left)
        tracers.append(right)
    Recursive(n-1, tracers, length/2**0.5)
def Setup(self, length, speed):
    self.hideturtle()
    self.speed(speed)
    self.penup()
    self.goto(-length*0.5, -length*1.8)
    self.seth(90)
    self.pensize(2)
    self.pendown() 
def main(level, length, speed=-1):
    setup(800,600)
    title('Fractal Tree')
    if speed==-1: tracer(0)
    else: tracer(1)
    t = Turtle()
    Setup(t, length, speed)
    from time import sleep
    sleep(2)
    Recursive(level, list([t]), length)
    done()
    bye() 
if __name__ == '__main__':    
    main(6,150,10)
 

主函數(shù): main(level, length, speed=-1)

參數(shù):
level: 樹(shù)的層數(shù)
length: 最底層正方形的邊長(zhǎng)
speed: 1~10,畫(huà)筆速度遞增;=0時(shí)速度最快;=-1時(shí)關(guān)閉畫(huà)筆蹤跡。

本篇完,其他分形圖待繼......

更多關(guān)于Turtle庫(kù)實(shí)現(xiàn)對(duì)稱(chēng)勾股樹(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python3實(shí)現(xiàn)在二叉樹(shù)中找出和為某一值的所有路徑(推薦)

    python3實(shí)現(xiàn)在二叉樹(shù)中找出和為某一值的所有路徑(推薦)

    這篇文章主要介紹了python3實(shí)現(xiàn)在二叉樹(shù)中找出和為某一值的所有路徑,本文通過(guò)一個(gè)實(shí)例demo給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 一文帶你探尋Python中的裝飾器

    一文帶你探尋Python中的裝飾器

    這篇文章就來(lái)和大家詳細(xì)講一講Python中裝飾器的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們深入了解Python有一定的幫助,感興趣的可以了解一下
    2023-04-04
  • 在前女友婚禮上用python把婚禮現(xiàn)場(chǎng)的WIFI名稱(chēng)改成了

    在前女友婚禮上用python把婚禮現(xiàn)場(chǎng)的WIFI名稱(chēng)改成了

    大家好,我是Lex 喜歡欺負(fù)超人那個(gè)Lex 擅長(zhǎng)領(lǐng)域:python開(kāi)發(fā),網(wǎng)絡(luò)安全滲透,Windows域控Exchange架構(gòu) 今日重點(diǎn):python暴力拿下WiFi密碼;python拿下路由器管理頁(yè)面 代碼干貨滿滿,建議收藏+實(shí)操!有問(wèn)題及需要,請(qǐng)留言哦
    2021-08-08
  • python如何查找所有子串位置

    python如何查找所有子串位置

    這篇文章主要介紹了python如何查找所有子串位置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 教你怎么用python爬取愛(ài)奇藝熱門(mén)電影

    教你怎么用python爬取愛(ài)奇藝熱門(mén)電影

    突然心血來(lái)潮想看看電影,特地整理了這篇文章,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python爬蟲(chóng)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • python實(shí)現(xiàn)ip地址的包含關(guān)系判斷

    python實(shí)現(xiàn)ip地址的包含關(guān)系判斷

    這篇文章主要介紹了python實(shí)現(xiàn)ip地址的包含關(guān)系判斷,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python用字典構(gòu)建多級(jí)菜單功能

    Python用字典構(gòu)建多級(jí)菜單功能

    這篇文章主要介紹了Python用字典構(gòu)建多級(jí)菜單功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python如何篩選序列中的元素的方法實(shí)現(xiàn)

    Python如何篩選序列中的元素的方法實(shí)現(xiàn)

    這篇文章主要介紹了Python如何篩選序列中的元素的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python函數(shù)的定義和調(diào)用案例講解

    python函數(shù)的定義和調(diào)用案例講解

    函數(shù)通常來(lái)說(shuō)就是帶名字的代碼塊,用于完成具體的工作,需要使用的時(shí)候調(diào)用即可,這不僅提高代碼的復(fù)用性,而且條理更清晰,函數(shù)定義使用def關(guān)鍵字創(chuàng)建函數(shù),下面通過(guò)本文給大家講解python函數(shù)的定義和調(diào)用,感興趣的朋友一起看看吧
    2024-06-06
  • 從安裝到應(yīng)用全面掌握Python與OpenCV的配置與高級(jí)功能(最新推薦)

    從安裝到應(yīng)用全面掌握Python與OpenCV的配置與高級(jí)功能(最新推薦)

    OpenCV的強(qiáng)大功能不僅限于基本的圖像處理,還可以擴(kuò)展到實(shí)時(shí)視頻分析、復(fù)雜的圖像拼接和特征匹配等應(yīng)用場(chǎng)景,這篇文章主要介紹了從安裝到應(yīng)用全面掌握Python與OpenCV的配置與高級(jí)功能,需要的朋友可以參考下
    2024-08-08

最新評(píng)論

申扎县| 孟村| 安康市| 治县。| 麻栗坡县| 福贡县| 黄大仙区| 潮安县| 印江| 镇赉县| 永靖县| 南京市| 甘洛县| 鄂托克旗| 中方县| 城口县| 沿河| 晋城| 天镇县| 霞浦县| 景德镇市| 岳普湖县| 兴安盟| 金山区| 阿克陶县| 大庆市| 西丰县| 天镇县| 平果县| 革吉县| 惠东县| 海宁市| 西乌珠穆沁旗| 雷州市| 北流市| 石棉县| 乌恰县| 开封县| 监利县| 龙井市| 唐山市|