(课程相关的所有资料代码,已上传至CSDN,请自行下载
https://download.csdn.net/download/qq_34243930/10764180 )
分形树绘制 1.0–五角星的绘制
• 案例描述
• 案例分析
• 上机实验
• turtle库
注意:调用turtle.exitonclick图形窗口才会停在那里!!!
向右转60度是直走方向的右手边右转60度!
关于五角星的角度
则应该右拐180-36=144度
代码一:
"""
作者:xpt
功能:五角星(pentagram)的绘制
版本号:1.0
日期:08/11/2018
"""
import turtle
def main():
"""
主函数
"""
# 第1条边
turtle.forward(100)
# 第2条边
turtle.right(144)
turtle.forward(100)
# 第3条边
turtle.right(144)
turtle.forward(100)
# 第4条边
turtle.right(144)
turtle.forward(100)
# 第5条边
turtle.right(144)
turtle.forward(100)
turtle.exitonclick()
if __name__ == '__main__':
main()
代码二:简化版代码
"""
作者:xpt
功能:五角星(pentagram)的绘制
版本号:1.0
日期:08/11/2018
"""
import turtle
def main():
"""
主函数
"""
# 计数器
count = 1
while count <= 5:
turtle.forward(100)
turtle.right(144)
count = count+1
turtle.exitonclick()
if __name__ == '__main__':
main()
• 怎么绘制重复不同大小的五角星?
分形树绘制2.0–重复不同大小五角星的绘制
关于代码,我一开始犯错误了,我没有吧count放进循环里!初始条件都没放进循环里,真是欠打!
代码1:
"""
作者:xpt
功能:五角星(pentagram)的绘制
版本号:2.0
日期:11/11/2018
新增功能:加入循环操作绘制重复不同大小的图形
"""
import turtle
def main():
"""
主函数
"""
size = 50
while size <= 100:
# 计数器
count = 1
while count <= 5:
turtle.forward(size)
turtle.right(144)
count = count+1
size = size + 10
turtle.exitonclick()
if __name__ == '__main__':
main()
**代码2:**封装进函数使程序更简洁
"""
作者:xpt
功能:五角星(pentagram)的绘制
版本号:2.0
日期:11/11/2018
新增功能:加入循环操作绘制重复不同大小的图形
"""
import turtle
def draw_pentagram(size):
"""
绘制五角星
"""
# 计数器
count = 1
while count <= 5:
turtle.forward(size)
turtle.right(144)
count = count + 1
def main():
"""
主函数
"""
size = 50
while size <= 100:
# 调用函数
draw_pentagram(size)
size = size + 10
turtle.exitonclick()
if __name__ == '__main__':
main()
详细API请参考:https://docs.python.org/3.0/library/turtle.html
设置turtle一些参数:
注意! 颜色传进去的是字符串
注意!设置语句写在主函数main里
"""
作者:xpt
功能:五角星(pentagram)的绘制
版本号:2.0
日期:11/11/2018
新增功能:加入循环操作绘制重复不同大小的图形
"""
import turtle
def draw_pentagram(size):
"""
绘制五角星
"""
# 计数器
count = 1
while count <= 5:
turtle.forward(size)
turtle.right(144)
count = count + 1
def main():
"""
主函数
"""
# 抬笔
turtle.penup()
# 笔往左移动300像素
turtle.backward(300)
# 落笔
turtle.pendown()
# 更改宽度
turtle.pensize(2)
# 更改颜色
turtle.pencolor('red')
size = 50
while size <= 100:
# 调用函数
draw_pentagram(size)
size = size + 10
turtle.exitonclick()
if __name__ == '__main__':
main()
对比图:
• 能否将循环和函数整合在一个函数中?
分形树绘制 3.0–函数与循环的结合(递归函数)
自己调用自己——>这是递归!
要注意终止条件的构建,否则递归无法正常返回结果
又犯错误了我,我一开始没加终止条件 if size <= 100:,结果它一直在画五角星
recursive adj. 递归的;循环的
"""
作者:xpt
功能:五角星(pentagram)的绘制
版本号:3.0
日期:11/11/2018
新增功能:加入循环操作绘制重复不同大小的图形
新增功能:函数与循环的结合(递归函数)
"""
import turtle
def draw_recursive_pentagram(size):
"""
迭代绘制五角星
"""
# 计数器
count = 1
while count <= 5:
turtle.forward(size)
turtle.right(144)
count = count + 1
# 五角星绘制完成,更新参数
size += 10
if size <= 100:
draw_recursive_pentagram(size)
def main():
"""
主函数
"""
# 抬笔
turtle.penup()
# 笔往左移动300像素
turtle.backward(300)
# 落笔
turtle.pendown()
# 更改宽度
turtle.pensize(2)
# 更改颜色
turtle.pencolor('red')
size = 50
# 调用函数
draw_recursive_pentagram(size)
turtle.exitonclick()
if __name__ == '__main__':
main()
递归函数
编写递归函数必备两条因素为:重复单元、停止条件
(开始条件、参数不是必备因素)
• 利用递归函数绘制分形树?
分形树绘制
• 案例描述
• 案例分析
• 分形树绘制分析
确定长度和角度:
分形树1.0
一定要单步调试感受一下过程!!很重要
"""
作者:xpt
功能:利用递归函数绘制分形树
版本号:1.0
日期:12/11/2018
"""
import turtle
def draw_branch(branch_length):
"""
绘制分形树
"""
if branch_length > 5:
# 起始树干
turtle.forward(branch_length)
# 绘制右侧树枝
turtle.right(20)
draw_branch(branch_length-15)
# 绘制左侧树枝
turtle.left(40)
draw_branch(branch_length - 15)
# 返回树枝节点
turtle.right(20)
turtle.backward(branch_length)
def main():
"""
主函数
"""
turtle.left(90)
# 调用函数
draw_branch(40)
turtle.exitonclick()
if __name__ == '__main__':
main()
分形树2.0
加入print语句,来帮助你理解程序过程
"""
作者:xpt
功能:利用递归函数绘制分形树+输出语句理解程序
版本号:2.0
日期:12/11/2018
"""
import turtle
def draw_branch(branch_length):
"""
绘制分形树
"""
if branch_length > 5:
# 起始树干
turtle.forward(branch_length)
print('向前',branch_length)
# 绘制右侧树枝
turtle.right(20)
print('右转20度')
draw_branch(branch_length-15)
# 绘制左侧树枝
turtle.left(40)
print('左转40度')
draw_branch(branch_length - 15)
# 返回树枝节点
turtle.right(20)
print('右转20度')
turtle.backward(branch_length)
print('向后', branch_length)
def main():
"""
主函数
"""
turtle.left(90)
# 调用函数
draw_branch(40)
turtle.exitonclick()
if __name__ == '__main__':
main()
分形树3.0
起始设置为100
分形树变很大,超出了窗体能见范围
修改:把开始落笔处往下移
"""
作者:xpt
功能:利用递归函数绘制分形树+输出语句理解程序+改变落笔定位
版本号:3.0
日期:12/11/2018
"""
import turtle
def draw_branch(branch_length):
"""
绘制分形树
"""
if branch_length > 5:
# 起始树干
turtle.forward(branch_length)
print('向前',branch_length)
# 绘制右侧树枝
turtle.right(20)
print('右转20度')
draw_branch(branch_length-15)
# 绘制左侧树枝
turtle.left(40)
print('左转40度')
draw_branch(branch_length - 15)
# 返回树枝节点
turtle.right(20)
print('右转20度')
turtle.backward(branch_length)
print('向后', branch_length)
def main():
"""
主函数
"""
turtle.left(90)
turtle.penup()
turtle.backward(100)
turtle.pendown()
# 调用函数
draw_branch(100)
turtle.exitonclick()
if __name__ == '__main__':
main()
思考:
• 判断如果是树枝末端,将画笔颜色更改为绿色,绘制出树叶的效果。