• 画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)


    最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~)
    one 樱花树

    •  动态生成樱花
      效果图(这个是动态的):
      在这里插入图片描述实现代码
    import turtle as T
    import random
    import time
    
    # 画樱花的躯干(60,t)
    def Tree(branch, t):
        time.sleep(0.0005)
        if branch > 3:
            if 8 <= branch <= 12:
                if random.randint(0, 2) == 0:
                    t.color('snow')  # 白
                else:
                    t.color('lightcoral')  # 淡珊瑚色
                t.pensize(branch / 3)
            elif branch < 8:
                if random.randint(0, 1) == 0:
                    t.color('snow')
                else:
                    t.color('lightcoral')  # 淡珊瑚色
                t.pensize(branch / 2)
            else:
                t.color('sienna')  # 赭(zhě)色
                t.pensize(branch / 10)  # 6
            t.forward(branch)
            a = 1.5 * random.random()
            t.right(20 * a)
            b = 1.5 * random.random()
            Tree(branch - 10 * b, t)
            t.left(40 * a)
            Tree(branch - 10 * b, t)
            t.right(20 * a)
            t.up()
            t.backward(branch)
            t.down()
    
    # 掉落的花瓣
    def Petal(m, t):
        for i in range(m):
            a = 200 - 400 * random.random()
            b = 10 - 20 * random.random()
            t.up()
            t.forward(b)
            t.left(90)
            t.forward(a)
            t.down()
            t.color('lightcoral')  # 淡珊瑚色
            t.circle(1)
            t.up()
            t.backward(a)
            t.right(90)
            t.backward(b)
    
    # 绘图区域
    t = T.Turtle()
    # 画布大小
    w = T.Screen()
    t.hideturtle()  # 隐藏画笔
    t.getscreen().tracer(5, 0)
    w.screensize(bg='wheat')  # wheat小麦
    t.left(90)
    t.up()
    t.backward(150)
    t.down()
    t.color('sienna')
    
    # 画樱花的躯干
    Tree(60, t)
    # 掉落的花瓣
    Petal(200, t)
    w.exitonclick()
    
    
    •  飘落效果
      效果图:
      在这里插入图片描述代码:
    from turtle import *
    from random import *
    from math import *
    
    def tree(n,l):
        pd()#下笔
        #阴影效果
        t = cos(radians(heading()+45))/8+0.25
        pencolor(t,t,t)
        pensize(n/3)
        forward(l)#画树枝
    
        if n>0:
            b = random()*15+10 #右分支偏转角度
            c = random()*15+10 #左分支偏转角度
            d = l*(random()*0.25+0.7) #下一个分支的长度
            #右转一定角度,画右分支
            right(b)
            tree(n-1,d)
            #左转一定角度,画左分支
            left(b+c)
            tree(n-1,d)
            #转回来
            right(c)
        else:
            #画叶子
            right(90)
            n=cos(radians(heading()-45))/4+0.5
            pencolor(n,n*0.8,n*0.8)
            circle(3)
            left(90)
            #添加0.3倍的飘落叶子
            if(random()>0.7):
                pu()
                #飘落
                t = heading()
                an = -40 +random()*40
                setheading(an)
                dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2)
                forward(dis)
                setheading(t)
                #画叶子
                pd()
                right(90)
                n = cos(radians(heading()-45))/4+0.5
                pencolor(n*0.5+0.5,0.4+n*0.4,0.4+n*0.4)
                circle(2)
                left(90)
                pu()
                #返回
                t=heading()
                setheading(an)
                backward(dis)
                setheading(t)
        pu()
        backward(l)#退回
    
    bgcolor(0.5,0.5,0.5)#背景色
    ht()#隐藏turtle
    speed(0)#速度 1-10渐进,0 最快
    tracer(0,0)
    pu()#抬笔
    backward(100)
    left(90)#左转90度
    pu()#抬笔
    backward(300)#后退300
    tree(12,100)#递归7层
    done()
    
    •  暗色效果
      效果:
      在这里插入图片描述
      代码
    from turtle import *
    from random import *
    from math import *
    
    def tree(n, l):
        pd()
        t = cos(radians(heading() + 45)) / 8 + 0.25
        pencolor(t, t, t)
        pensize(n / 4)
        forward(l)
        if n > 0:
            b = random() * 15 + 10
            c = random() * 15 + 10
            d = l * (random() * 0.35 + 0.6)
            right(b)
            tree(n - 1, d)
            left(b + c)
            tree(n - 1, d)
            right(c)
        else:
            right(90)
            n = cos(radians(heading() - 45)) / 4 + 0.5
            pencolor(n, n, n)
            circle(2)
            left(90)
        pu()
        backward(l)
    bgcolor(0.5, 0.5, 0.5)
    ht()
    speed(0)
    tracer(0, 0)
    left(90)
    pu()
    backward(300)
    tree(13, 100)
    done()
    

    two 玫瑰花
    效果(有绘制过程)
    在这里插入图片描述代码

    
    
    from turtle import *
    import time
    
    setup(1000,800,0,0)
    speed(0)
    penup()
    seth(90)
    fd(340)
    seth(0)
    pendown()
    
    speed(5)
    begin_fill()
    fillcolor('red')
    circle(50,30)
    
    for i in range(10):
        fd(1)
        left(10)
    
    circle(40,40)
    
    for i in range(6):
        fd(1)
        left(3)
    
    circle(80,40)
    
    for i in range(20):
        fd(0.5)
        left(5)
    
    circle(80,45)
    
    for i in range(10):
        fd(2)
        left(1)
    
    circle(80,25)
    
    for i in range(20):
        fd(1)
        left(4)
    
    circle(50,50)
    
    time.sleep(0.1)
    
    circle(120,55)
    
    speed(0)
    
    seth(-90)
    fd(70)
    
    right(150)
    fd(20)
    
    left(140)
    circle(140,90)
    
    left(30)
    circle(160,100)
    
    left(130)
    fd(25)
    
    penup()
    right(150)
    circle(40,80)
    pendown()
    
    left(115)
    fd(60)
    
    penup()
    left(180)
    fd(60)
    pendown()
    
    end_fill()
    
    right(120)
    circle(-50,50)
    circle(-20,90)
    
    speed(1)
    fd(75)
    
    speed(0)
    circle(90,110)
    
    penup()
    left(162)
    fd(185)
    left(170)
    pendown()
    circle(200,10)
    circle(100,40)
    circle(-52,115)
    left(20)
    circle(100,20)
    circle(300,20)
    speed(1)
    fd(250)
    
    penup()
    speed(0)
    left(180)
    fd(250)
    circle(-300,7)
    right(80)
    circle(200,5)
    pendown()
    
    left(60)
    begin_fill()
    fillcolor('green')
    circle(-80,100)
    right(90)
    fd(10)
    left(20)
    circle(-63,127)
    end_fill()
    
    penup()
    left(50)
    fd(20)
    left(180)
    
    pendown()
    circle(200,25)
    
    penup()
    right(150)
    
    fd(180)
    
    right(40)
    pendown()
    begin_fill()
    fillcolor('green')
    circle(-100,80)
    right(150)
    fd(10)
    left(60)
    circle(-80,98)
    end_fill()
    
    penup()
    left(60)
    fd(13)
    left(180)
    
    pendown()
    speed(1)
    circle(-200,23)
    
    
    
    exitonclick()
    

    three 圣诞树

    •  圣诞树 (动态生成效果)
      在这里插入图片描述
      代码:
    from turtle import *
    import random
    import time
    
    n = 100.0
    
    speed("fastest")
    screensize(bg='seashell')
    left(90)
    forward(3*n)
    color("orange", "yellow")
    begin_fill()
    left(126)
    
    for i in range(5):
        forward(n/5)
        right(144)
        forward(n/5)
        left(72)
    end_fill()
    right(126)
    
    color("dark green")
    backward(n*4.8)
    def tree(d, s):
        if d <= 0: return
        forward(s)
        tree(d-1, s*.8)
        right(120)
        tree(d-3, s*.5)
        right(120)
        tree(d-3, s*.5)
        right(120)
        backward(s)
    tree(15, n)
    backward(n/2)
    
    for i in range(200):
        a = 200 - 400 * random.random()
        b = 10 - 20 * random.random()
        up()
        forward(b)
        left(90)
        forward(a)
        down()
        if random.randint(0, 1) == 0:
                color('tomato')
        else:
            color('wheat')
        circle(2)
        up()
        backward(a)
        right(90)
        backward(b)
    
    time.sleep(60)
    
    
  • 相关阅读:
    Oracle时间日期操作
    c# 语音卡控制语音卡实现电话录音
    ORACLE日期时间函数大全
    oracle的表分区
    如何应付表数据过大的查询问题?(如何尽量避免大表关联)[转]
    优化SQL Server数据库
    oracle知识回顾
    增强现实 artoolkit
    高负载系统架构设计
    三套.net支持库
  • 原文地址:https://www.cnblogs.com/joker-game/p/12065767.html
Copyright © 2020-2023  润新知