每日总结2023/4/5(分型图形设计)
分形
分形,具有以非整数维形式充填空间的形态特征。通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。分形(Fractal)一词,是芒德勃罗创造出来的,其原意具有不规则、支离破碎等意义。1973年,芒德勃罗(B.B.Mandelbrot)在法兰西学院讲课时,首次提出了分维和分形的设想。
turtle模块时python自带的一个绘图模块,俗称海龟绘图.
常用方法
方法 描述 简写
分形的特点是放大图形的任一局部和整体具有自相似性,这个特点刚好和递归函数的性质相似,所以今天我们通过调用海龟模块使用递归函数来绘制分形图
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()
参考文档
(28条消息) 轻松一下:python(turtle模块)绘制分形图_python分形_Morbidmuse的博客-CSDN博客