每日总结2023/4/5(分型图形设计)

发布时间 2023-04-06 21:53:28作者: 橘子味芬达水

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