分形

分形,具有以非整数维形式充填空间的形态特征。通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。分形(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模块)绘制分形图相关推荐

  1. python画五角星代码_Python使用Turtle模块绘制五星红旗代码示例

    在Udacity上课时学到了python的turtle方法,这是一个很经典的用来教小孩儿编程的图形模块,最早起源于logo语言.python本身内置了这个模块,其可视化的方法可以帮助小孩儿对编程的一些 ...

  2. Python 使用turtle模块绘制统计柱状图

    [题目]使用turtle模块绘制词频统计结果,其中词频数据 wordFrequency = {"the":104, "a":63, "to" ...

  3. Python 利用Turtle模块绘制国际象棋棋盘

    使用Turtle模块绘制国际象棋棋盘 使用语言:Python 3.7.3 思路: 国际象棋是8×8的一个个小正方形,或者说是9横9纵的线组成.作画的时候,先做9横9纵的线,再填上灰色的小正方形,即可完 ...

  4. 用python函数画德国国旗代码_Python使用Turtle模块绘制五星红旗代码示例

    在Udacity上课时学到了python的turtle方法,这是一个很经典的用来教小孩儿编程的图形模块,最早起源于logo语言.python本身内置了这个模块,其可视化的方法可以帮助小孩儿对编程的一些 ...

  5. 利用python库中的turtle模块绘制自己的名字

    # 利用turtle模块绘制自己名字 --杨文博 import turtle as p p.pensize(5) p.pencolor("cornflowerblue") p.se ...

  6. python 画八角形_GitHub - xuedengyue/Turtle_Drawing: 利用Turtle递归绘制分形几何图形

    Turtle_Drawing 利用Turtle递归绘制分形几何图形 一.Turtle的常用方法 方法 描述 turtle.forward(distance) 向当前画笔方向移动distance像素长度 ...

  7. python用turtle画月亮_使用Python turtle画表白分形树

    原标题:使用Python turtle画表白分形树 turtle --- 海龟绘图 海龟绘图很适合用来引导孩子学习编程.最初来自于 Wally Feurzig 和 Seymour Papert 于 1 ...

  8. 用python函数画德国国旗代码_每日一程-11.利用Python turtle库绘制国旗

    Author: Notus(hehe_xiao@qq.com) Create: 2019-02-19 Update: 2019-02-19 利用turtle模块绘制五星红旗 原理不算太复杂,只是需要稍 ...

  9. 十分钟轻松学会python-10分钟轻松学会python turtle绘图

    python2.6版本中后引入的一个简单的绘图工具,叫做海龟绘图(Turtle Graphics),turtle库是python的内部库,使用导入即可 import turtle 先说明一下turtl ...

最新文章

  1. load python txt文件_详解Python中numpy.loadtxt()读取txt文件
  2. Pandas读取中文文本文件报错:python ‘utf-8‘ codec can‘t decode byte 0xe3 in position 0: unexpected end of data
  3. 【thymeleaf】转义符:使用转义符拼接输出单引号
  4. python输入数据爬取_python根据用户需求输入想爬取的内容及页数爬取图片方法详解...
  5. 怎么样开会才有效果?
  6. 瘦子的肠道菌群和胖子的区别_瘦子和病态肥胖患者肠道菌群组成和潜在功能的显著差异...
  7. “数据门”事件频发如何避免人为因素导致数据泄露?
  8. python problem
  9. tomcat 运行报错 JRE_HOME
  10. EXPLAIN mysql性能调优
  11. paip.提升效率---给页面程序增加调试功能
  12. 百度地图自定义信息窗口
  13. 新建Flutter项目无法导入FlutterActivity
  14. 《机器学习实战》机器学习概述
  15. 大数据平台之今日头条采集,今日特卖全自动发布,淘宝达人有好货一键上传
  16. 程序员的你想跳槽了?谨记:哪里都不好混!
  17. 揭开木马的神秘面纱 2
  18. AR+LBS线下社交游戏尝试
  19. Sell变量的取用、删除、取代与替换
  20. UOJ224 NOI2016 旷野大计算 构造、造计算机

热门文章

  1. 2003-2021年高铁列车信息
  2. 想给公司起个大气点的名字,大家帮忙啊!!!
  3. 洛谷 P4883 mzf的考验 解题报告
  4. 什么是“好”系统呢?
  5. Java筑基18-布置作业啦(考查抽象类、内部类、工厂模式等)
  6. Deep Representation Learning for Trajectory Similarity Computation
  7. oracle 生成随机姓名_Oracle生成随机码
  8. Dubbo篇:基于Netty实现Dubbo协议编解码源码分析
  9. 开发一个可以查询并显示数据库内容的微信小程序
  10. HUAWEI华为MateBook13 2020锐龙版R5集显16G+512GB(HNL-WFQ9)原装出厂系统恢复原厂系统