栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

「Python海龟画图」利用海龟画笔绘制分形树

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

「Python海龟画图」利用海龟画笔绘制分形树

 

绘制旋转图形

功能要求

利用函数递归绘制由多条直线组成的旋转图形,每条直线的颜色随机产生;并且隐藏画笔、设置画笔的速度、设置画布的背景色。

实例代码

import turtle               # 导入海龟模块

import random               # 导入随机数



turtle.ht()                 # 隐藏海龟画笔

turtle.speed(0)             # 设置画笔速度

turtle.colormode(255)       # 设置颜色模式

turtle.bgcolor("lavender")  # 设置画布的背景颜色



'''

    定义绘制旋转曲线的函数

    length参数表示绘制矩形的边长

'''

def drawRectangle(length):

    r, g, b = random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)

                                # 随机获得画笔的rgb值

    turtle.pencolor(r, g, b)    # 根据rgb的设置画笔的颜色

    if length <= 0:             # 当矩形边长小于等于0时停止画图

        return

    turtle.forward(length)      # 绘制长度为length的线段

    turtle.right(91)            # 画笔向右旋转91°

    drawRectangle(length - 1)   # 递归调用drawRectangle函数,线段长度-1



drawRectangle(100)  # 调用drawRectangle函数绘制由100条直线绘制的图形

turtle.done()       # 暂停程序,停止画笔绘制

运行结果

 

代码分析

def drawRectangle(length):

    ……

    if length <= 0:             # 当矩形边长小于等于0时停止画图

        return

    ……

    drawRectangle(length - 1)   # 递归调用drawRectangle函数,线段长度-1:定义drawRectangle(length)函数用于绘制矩形,在函数中调用drawRectangle(length - 1)函数【即调用自身函数】,这样的函数调用被称为递归调用。注意:在函数递归调用时要编写函数的出口来结束函数的递归调用,否则会出现函数已知被调用,内存溢出。

if length <= 0:             # 当矩形边长小于等于0时停止画图

    return:在drawRectangle(length)函数中表示当length小于等于0时drawRectangle(length)函数不在被调用,函数停止调用。

drawRectangle(100):调用drawRectangle函数绘制由100条直线绘制的图形

绘制分形树

功能要求

利用函数递归调用绘制一个分形树,每个树枝的的颜色随机产生,每个树枝的粗细为树枝长的1/10,每个树枝分出左右两个树枝,即向左和向右个旋转45°角,第一个主干的长度为120,每次个分支先画完左分支在回到起点绘制有分支;并且隐藏画笔、设置画笔的速度、设置画布的背景色。

实例代码

import turtle               # 导入海龟模块

import random               # 导入随机数



turtle.ht()                 # 隐藏海龟画笔

turtle.speed(0)             # 设置画笔速度

turtle.colormode(255)       # 设置颜色模式

turtle.bgcolor("lavender")  # 设置画布的背景颜色

length = 120                # 定义树干的长度

turtle.pensize(length / 10) # 设置画笔的粗细



# 设置第一个树枝的起点位置

turtle.penup()

turtle.goto(0, -length)

turtle.pendown()

turtle.left(90)



turtle.forward(length)      # 绘制第一个树枝



'''

    绘制一课包括左右分支的树

    l参数表示树枝的长度

    lv参数表示树的层次

'''

def drawTree(l, lv):

    r, g, b = random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)

    turtle.pencolor(r, g, b)    # 设置树枝的颜色

    l = l * 3 / 4               # 设置树枝的长度

    turtle.pensize(l / 10)      # 设置树枝的宽度

    # 绘制左边枝干

    turtle.left(45)             # 向左转45°,准备绘制左分支树

    turtle.forward(l)           # 画出左边的树枝

    if lv > 0:                  # 当树的层次大于0,递归调用drawTree绘制下颗左树

        drawTree(l, lv - 1)

    # 退回到原点

    turtle.backward(l)          # 画笔回到原点

    turtle.right(45)            # 画笔的角度还原

    # 绘制右边枝干

    turtle.right(45)            # 向右转45°,准备绘制右分支树

    turtle.forward(l)           # 画出左边的树枝

    if lv > 0:                  # 当树的层次大于0,递归调用drawTree绘制下颗右树

        drawTree(l, lv - 1)

    turtle.backward(l)          # 画笔回到原点

    turtle.left(45)             # 画笔的角度还原

    turtle.pensize(l / 10)      # 画笔宽度还原



drawTree(length, 8)     # 绘制树干长度为length,树枝深度为5的分形树

turtle.done()           # 暂停程序,停止画笔绘制

运行结果

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/953542.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号