轻松一下:python(turtle模块)绘制分形图
分形
分形,具有以非整数维形式充填空间的形态特征。通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。分形(Fractal)一词,是芒德勃罗创造出来的,其原意具有不规则、支离破碎等意义。1973年,芒德勃罗(B.B.Mandelbrot)在法兰西学院讲课时,首次提出了分维和分形的设想。
turtle模块
turtle模块时python自带的一个绘图模块,俗称海龟绘图.
方法 | 描述 | 简写 |
t=turtle.Turtle() | 新建海龟 | None |
forward(length) | 前进length个像素单位 | fd() |
backward(length) | 后退ength个像素单位 | bw() |
left(degree) | 左转degree度(角度制) | lt() |
right(degree) | 右转degree度(角度制) | rt() |
penup() | 抬笔,后续移动不会产生轨迹 | up() |
pendown() | 落笔,后续移动会产生轨迹 | down() |
goto(x,y) | 从当前位置移动到(x,y)位置 | \ |
color(color1,color2) | 将画笔颜色设置为color1,填充颜色设置为color2 |
\ |
setheading(degree) | 设置海龟头朝向 | \ |
hideturtle() | 隐藏海龟 | ht() |
begin_fill() | 开始填充 | \ |
end_fill() | 结束填充 | \ |
分形的特点是放大图形的任一局部和整体具有自相似性,这个特点刚好和递归函数的性质相似,所以今天我们通过调用海龟模块使用递归函数来绘制分形图
一.餐前甜点--螺旋线
from turtle import * # 导入海龟模块my_turtle = Turtle() # 创建海龟对象
my_win = my_turtle.getscreen() # 创建屏幕对象def draw_spiral(my_turtle,linelen): # 定义绘制螺旋线的递归函数if linelen > 0: # 递归边界my_turtle.fd(linelen)my_turtle.rt(90)draw_spiral(my_turtle,linelen-5) # 递归调用my_turtle.speed(10)
my_turtle.up()
my_turtle.goto(-200,200)
my_turtle.down()
draw_spiral(my_turtle,300)
my_turtle.hideturtle() # 隐藏海龟
my_win.exitonclick() # 为保证绘制完成后不自动退出,使用这个方法点击后关闭窗口
结果
是不是有点动图的眩晕感!!!
二.分形--二叉树
import random
from turtle import *my_turtle = Turtle()
my_win = my_turtle.getscreen()def tree(branch_len,t):if branch_len > 5:if branch_len <= 20:t.pencolor('green') # 当树枝很小时,画笔绿色.模拟树叶else:t.pencolor('black')t.pensize(branch_len//10) # 随着递归的进行 树枝越来越细t.fd(branch_len)degree = random.randint(15,30) # 随机角度t.rt(degree)gap = random.uniform(10,15) # 随机减少的增量tree(branch_len-gap,t)t.lt(2*degree)tree(branch_len-gap, t)t.rt(degree)t.backward(branch_len)
my_turtle.setheading(90)
my_turtle.speed(10)
my_turtle.up()
my_turtle.backward(300)
my_turtle.down()
tree(100,my_turtle)my_win.exitonclick()
结果
三.分形--谢尔宾斯基三角形
from turtle import *def draw_triangle(points,color,t):'''给定三个点绘制三角形'''t.fillcolor(color)t.up()t.goto(points[0])t.down()t.begin_fill()t.goto(points[1])t.goto(points[2])t.end_fill()def get_mid(p1,p2):'''求中点'''return ((p1[0] +p2[0]) / 2,(p1[1] +p2[1]) / 2)def sierpinski(points,depth,t):color_map = ['black','white','yellow','red','pink','purple','orange','cyan','violet','blue','green']draw_triangle(points,color_map[depth],t)if depth > 0: # 当递归深度大于0时,在3各小三角形中递归调用谢尔宾斯基三角形sierpinski([points[0],get_mid(points[0],points[1]),\get_mid(points[0],points[2])],depth-1, t)sierpinski([points[1],get_mid(points[0],points[1]),\get_mid(points[1],points[2])],depth-1, t)sierpinski([points[2],get_mid(points[0],points[2]),\get_mid(points[1],points[2])],depth-1, t)my_turtle = Turtle()
my_turtle.speed(10)
my_win = my_turtle.getscreen()
screensize(1600,900)my_points = [(-300,-250),(0,300),(300,-250)]
sierpinski(my_points,8,my_turtle)my_win.exitonclick()
结果:
画了5层,绘制大概用了2分钟
四.分形山
import random
from turtle import *# turtle.colormode(255)
my_turtle = Turtle()
my_win = my_turtle.getscreen()def draw_triangle(points,color,t):'''给定三个点绘制三角形'''t.color(color)t.up()t.goto(points[0])t.down()t.begin_fill()t.goto(points[1])t.goto(points[2])t.end_fill()def mountain(t,start_x,start_y,end_x,end_y,depth,color):y_offset = random.randint(10,30)mid_x = (start_x + end_x) / 2mid_y = (start_y + end_y) / 2 + y_offsetdraw_triangle([(start_x,start_y),(end_x,end_y),(mid_x,mid_y)],color,t)if depth > 0 :mountain(t,start_x,start_y,mid_x,mid_y,depth-1,color)mountain(t, mid_x, mid_y, end_x,end_y, depth - 1,color)x1,y1,x2,y2 = -400,-50,400,-50
colors = ['#DAE0DF','#959998','#505453','#070707']
for i in range(4):mountain(my_turtle,x1,y1-i*30,x2,y2-i*30,6,colors[i])my_win.exitonclick()
结果
循环画了四次,但是四次的主要特征还是态明显.应该还能调整一下参数显得更真实一点
五.科赫雪花
努力求解中
六.伪希尔伯特曲线
努力求解中
参考:
百度百科:分形(几何学术语)_百度百科 (baidu.com)
布拉德利.米勒 戴维.拉努姆<<pythons数据结构与算法分析>>(第二版)第四章递归
轻松一下:python(turtle模块)绘制分形图相关推荐
- python画五角星代码_Python使用Turtle模块绘制五星红旗代码示例
在Udacity上课时学到了python的turtle方法,这是一个很经典的用来教小孩儿编程的图形模块,最早起源于logo语言.python本身内置了这个模块,其可视化的方法可以帮助小孩儿对编程的一些 ...
- Python 使用turtle模块绘制统计柱状图
[题目]使用turtle模块绘制词频统计结果,其中词频数据 wordFrequency = {"the":104, "a":63, "to" ...
- Python 利用Turtle模块绘制国际象棋棋盘
使用Turtle模块绘制国际象棋棋盘 使用语言:Python 3.7.3 思路: 国际象棋是8×8的一个个小正方形,或者说是9横9纵的线组成.作画的时候,先做9横9纵的线,再填上灰色的小正方形,即可完 ...
- 用python函数画德国国旗代码_Python使用Turtle模块绘制五星红旗代码示例
在Udacity上课时学到了python的turtle方法,这是一个很经典的用来教小孩儿编程的图形模块,最早起源于logo语言.python本身内置了这个模块,其可视化的方法可以帮助小孩儿对编程的一些 ...
- 利用python库中的turtle模块绘制自己的名字
# 利用turtle模块绘制自己名字 --杨文博 import turtle as p p.pensize(5) p.pencolor("cornflowerblue") p.se ...
- python 画八角形_GitHub - xuedengyue/Turtle_Drawing: 利用Turtle递归绘制分形几何图形
Turtle_Drawing 利用Turtle递归绘制分形几何图形 一.Turtle的常用方法 方法 描述 turtle.forward(distance) 向当前画笔方向移动distance像素长度 ...
- python用turtle画月亮_使用Python turtle画表白分形树
原标题:使用Python turtle画表白分形树 turtle --- 海龟绘图 海龟绘图很适合用来引导孩子学习编程.最初来自于 Wally Feurzig 和 Seymour Papert 于 1 ...
- 用python函数画德国国旗代码_每日一程-11.利用Python turtle库绘制国旗
Author: Notus(hehe_xiao@qq.com) Create: 2019-02-19 Update: 2019-02-19 利用turtle模块绘制五星红旗 原理不算太复杂,只是需要稍 ...
- 十分钟轻松学会python-10分钟轻松学会python turtle绘图
python2.6版本中后引入的一个简单的绘图工具,叫做海龟绘图(Turtle Graphics),turtle库是python的内部库,使用导入即可 import turtle 先说明一下turtl ...
最新文章
- load python txt文件_详解Python中numpy.loadtxt()读取txt文件
- Pandas读取中文文本文件报错:python ‘utf-8‘ codec can‘t decode byte 0xe3 in position 0: unexpected end of data
- 【thymeleaf】转义符:使用转义符拼接输出单引号
- python输入数据爬取_python根据用户需求输入想爬取的内容及页数爬取图片方法详解...
- 怎么样开会才有效果?
- 瘦子的肠道菌群和胖子的区别_瘦子和病态肥胖患者肠道菌群组成和潜在功能的显著差异...
- “数据门”事件频发如何避免人为因素导致数据泄露?
- python problem
- tomcat 运行报错 JRE_HOME
- EXPLAIN mysql性能调优
- paip.提升效率---给页面程序增加调试功能
- 百度地图自定义信息窗口
- 新建Flutter项目无法导入FlutterActivity
- 《机器学习实战》机器学习概述
- 大数据平台之今日头条采集,今日特卖全自动发布,淘宝达人有好货一键上传
- 程序员的你想跳槽了?谨记:哪里都不好混!
- 揭开木马的神秘面纱 2
- AR+LBS线下社交游戏尝试
- Sell变量的取用、删除、取代与替换
- UOJ224 NOI2016 旷野大计算 构造、造计算机
热门文章
- 2003-2021年高铁列车信息
- 想给公司起个大气点的名字,大家帮忙啊!!!
- 洛谷 P4883 mzf的考验 解题报告
- 什么是“好”系统呢?
- Java筑基18-布置作业啦(考查抽象类、内部类、工厂模式等)
- Deep Representation Learning for Trajectory Similarity Computation
- oracle 生成随机姓名_Oracle生成随机码
- Dubbo篇:基于Netty实现Dubbo协议编解码源码分析
- 开发一个可以查询并显示数据库内容的微信小程序
- HUAWEI华为MateBook13 2020锐龙版R5集显16G+512GB(HNL-WFQ9)原装出厂系统恢复原厂系统