不少用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)

未完待续!

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

  • 动态生成樱花
    效果图(这个是动态的):

  • 实现代码

import turtle as Timport randomimport 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()#隐藏turtlespeed(0)#速度 1-10渐进,0 最快tracer(0,0)pu()#抬笔backward(100)left(90)#左转90度pu()#抬笔backward(300)#后退300tree(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 randomimport 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)

未完待续!

Python画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)的更多相关文章

  1. (转)Python新手写出漂亮的爬虫代码2——从json获取信息

    https://blog.csdn.net/weixin_36604953/article/details/78592943 Python新手写出漂亮的爬虫代码2——从json获取信息好久没有写关于爬 ...

  2. (转)Python新手写出漂亮的爬虫代码1——从html获取信息

    https://blog.csdn.net/weixin_36604953/article/details/78156605 Python新手写出漂亮的爬虫代码1初到大数据学习圈子的同学可能对爬虫都有 ...

  3. js画一棵树

    用纯js画一棵树.思路: 1.一棵树的图片,作为页面背景: 2.通过html5中的canvas画布进行遮罩: 3.定时每隔10ms,从下往上清除1px的遮罩: <!DOCTYPE html> ...

  4. 沉淀再出发:用python画各种图表

    沉淀再出发:用python画各种图表 一.前言 最近需要用python来做一些统计和画图,因此做一些笔记. 二.python画各种图表 2.1.使用turtle来画图 import turtle as ...

  5. python画樱花

    用python画简单的樱花 代码如下: import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, t): ...

  6. python 画小猪佩奇

    转自:python画个小猪佩奇 # -*- coding: utf-8 -*- """ Created on Mon May 20 11:36:03 2019 @auth ...

  7. 用python画 pareto front

    用python画 pareto front 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2D pf import os import matplotlib.pyplot as plt im ...

  8. python 画3D的高斯曲线

    用python画3D的高斯曲线,我想如果有多个峰怎么画? import numpy as npimport matplotlib.pyplot as pltimport mathimport mpl_ ...

  9. python画一只佩奇

    用python画一只佩奇 from turtle import* def nose(x,y):#鼻子 penup()#提起笔 goto(x,y)#定位 pendown()#落笔,开始画 sethead ...

随机推荐

  1. React Hook父组件获取子组件的数据/函数

    我们知道在react中,常用props实现子组件数据到父组件的传递,但是父组件调用子组件的功能却不常用.文档上说ref其实不是最佳的选择,但是想着偷懒不学redux,在网上找了很多教程,要不就是hoo ...

  2. 十分钟 CODING DevOps 全链路体验

    近期 CODING 团队在 2019 KubeCon 大会上发布 DevOps 一站式解决方案:CODING 2.0.此次 CODING 全新上线了持续集成与制品库模块,通过自动化与标准化的方式来帮助 ...

  3. 中小后台系统UI框架--EasyUI

    后台开发人员不擅长前端UI界面,而小型软件公司没有专职美工岗位,开发人员只能借助开源UI框架,复用已有组件,完成用户操作界面.EasyUI是基于jQuery的UI插件集合体,可帮助开发者轻松构建网页. ...

  4. August 18th, 2019. Week 34th, Sunday

    Fear doesn't shut you down, it wakes you up. 恐惧不会消磨你的意志,它能激发你的潜能. We all know that fear is powerful, ...

  5. 《Google软件测试之道》

    Google软件测试之道 Google对质量的理解 质量不等于测试,即质量不是被测出来的 开发和测试应该并肩齐驱,测试就是开发过程中不可缺少的一部分 质量是一种预防行为而不是检测 Google对软件测 ...

  6. [译]Vulkan教程(32)生成mipmap

    [译]Vulkan教程(32)生成mipmap Generating Mipmaps 生成mipmap Introduction 入门 Our program can now load and ren ...

  7. Maven使用之packaging类型

    项目的打包类型:pom.jar.war 项目中一般使用maven进行模块管理,每个模块下对应都有一个pom文件,pom文件中维护了各模块之间的依赖和继承关系.项目模块化可以将通用的部分抽离出来,方便重 ...

  8. FormData使用方法详解,以及在IE9环境下,前端的文件上传问题

    FormData的主要用途有两个: 1.将form表单元素的name与value进行组合,实现表单数据的序列化,从而减少表单元素的拼接,提高工作效率. 2.异步上传文件 一.创建formData对象 ...

  9. java基础(3):变量、运算符

    1. 变量 1.1 变量概述 前面我们已经学习了常量,接下来我们要学习变量.在Java中变量的应用比常量的应用要多很多.所以变量也是尤为重要的知识点! 什么是变量?变量是一个内存中的小盒子(小容器), ...

  10. PlayJava Day013

    今日所学: /* 2019.08.19开始学习,此为补档. */ 1.BufferedImage:是Image的一个子类,两者的主要作用就是将一副图片加载到内存中,即图像缓冲区. 对于本地图片: Fi ...