欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python學習Turtle庫畫對稱勾股樹體會分形驚艷

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

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

——摘自百度百科

自然界中的分形幾何 

 

人為的分形圖案

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

舉個例子:

源代碼:

import turtle 
def bintree(size):
    angle = 60    # 分叉的角度
    if size > 5:    # 長度退出條件
        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()

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

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

以下是我用Turtle庫畫的一棵12層的對稱勾股樹,使用“層序遍歷”方式:

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

簡單點,就用一個6層的來示意一下其“層序”的過程:

源代碼:

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ù)
length: 最底層正方形的邊長
speed: 1~10,畫筆速度遞增;=0時速度最快;=-1時關閉畫筆蹤跡。

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

更多關于Turtle庫實現(xiàn)對稱勾股樹的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:

相關文章

  • python用正則表達式提取/匹配中文漢字

    python用正則表達式提取/匹配中文漢字

    在使用Python的過程中,由于需求原因,我們經(jīng)常需要在文本或者網(wǎng)頁元素中用Python正則表達式匹配中文,下面這篇文章主要給大家介紹了關于python用正則表達式提取/匹配中文漢字的相關資料,需要的朋友可以參考下
    2022-07-07
  • Python Tornado框架輕松寫一個Web應用的全過程

    Python Tornado框架輕松寫一個Web應用的全過程

    Tornado全稱Tornado Web Server,是一個用Python語言寫成的Web服務器兼Web應用框架,Tornado走的是少而精的方向,注重的是性能優(yōu)越,它最出名的是異步非阻塞的服務器方式,這篇文章主要給大家介紹了關于Python Tornado框架輕松寫一個Web應用的相關資料,需要的朋友可以參考下
    2021-08-08
  • PyTorch中permute的用法詳解

    PyTorch中permute的用法詳解

    今天小編就為大家分享一篇PyTorch中permute的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python打包成so文件過程解析

    python打包成so文件過程解析

    這篇文章主要介紹了python打包成so文件過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Python序列循環(huán)移位的3種方法推薦

    Python序列循環(huán)移位的3種方法推薦

    下面小編就為大家分享一篇Python序列循環(huán)移位的3種方法推薦,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • anaconda如何創(chuàng)建和刪除環(huán)境

    anaconda如何創(chuàng)建和刪除環(huán)境

    這篇文章主要介紹了anaconda如何創(chuàng)建和刪除環(huán)境,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 使用Python刪除文本文件中特定行的操作方法

    使用Python刪除文本文件中特定行的操作方法

    文件操作是編程中的重要方面,Python作為強大的編程語言,提供了處理文件的能力,刪除特定行是文件處理中常見的需求,本文給大家介紹了Python快速刪除文本文件中指定行的方法,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2023-12-12
  • django2筆記之路由path語法的實現(xiàn)

    django2筆記之路由path語法的實現(xiàn)

    這篇文章主要介紹了django2筆記之路由path語法的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • python實現(xiàn)自動清理重復文件

    python實現(xiàn)自動清理重復文件

    這篇文章主要介紹了python如何實現(xiàn)自動清理重復文件,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-08-08
  • Python實現(xiàn)日志實時監(jiān)測的示例詳解

    Python實現(xiàn)日志實時監(jiān)測的示例詳解

    觀察者模式:是一種行為型設計模式。主要關注的是對象的責任,允許你定義一種訂閱機制,可在對象事件發(fā)生時通知多個"觀察"該對象的其他對象。本文將利用觀察者模式實現(xiàn)日志實時監(jiān)測,需要的可以參考一下
    2022-04-04

最新評論