zoukankan      html  css  js  c++  java
  • 挺好玩的 画树

    https://blog.csdn.net/weixin_43943977/article/details/102691392

    Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
    原创Soul fragments 最后发布于2019-10-22 21:59:00 阅读数 216852 收藏
    展开
    最近翻到一篇知乎,上面有不少用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()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    飘落效果
    效果图:
    代码:
    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()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    暗色效果
    效果:

    代码
    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()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    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()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    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)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    未完待续!
    ————————————————
    版权声明:本文为CSDN博主「Soul fragments」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_43943977/article/details/102691392

  • 相关阅读:
    2019牛客暑期多校训练营(第三场)- LRU management
    2019牛客暑期多校训练营(第三场)- F Planting Trees
    HDU1392 Surround the Trees
    2019 Multi-University Training Contest 2
    3101 阶乘分解 (数学)
    Prime Distance POJ
    反素数ant HYSBZ
    B. Nirvana Codeforces Round #549 (Div. 2) (递归dfs)
    C. Queen Codeforces Round #549 (Div. 2) (搜索)
    Cow Relays POJ
  • 原文地址:https://www.cnblogs.com/try-chi/p/12355747.html
Copyright © 2011-2022 走看看