1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 「Python海龟画图」利用海龟画笔绘制分形树

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

时间:2020-11-29 20:53:03

相关推荐

「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时停止画图returnturtle.forward(length) # 绘制长度为length的线段turtle.right(91) # 画笔向右旋转91°drawRectangle(length - 1) # 递归调用drawRectangle函数,线段长度-1drawRectangle(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() # 暂停程序,停止画笔绘制

运行结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。