2021-12-23 Python之 生成动态樱花树

1. 动态生成樱花

 1 import turtle as T
 2 import random
 3 import time
 4 
 5 # 画樱花的躯干(60,t)
 6 def Tree(branch, t):
 7     time.sleep(0.0005)
 8     if branch > 3:
 9         if 8 <= branch <= 12:
10             if random.randint(0, 2) == 0:
11                 t.color('snow')  #
12             else:
13                 t.color('lightcoral')  # 淡珊瑚色
14             t.pensize(branch / 3)
15         elif branch < 8:
16             if random.randint(0, 1) == 0:
17                 t.color('snow')
18             else:
19                 t.color('lightcoral')  # 淡珊瑚色
20             t.pensize(branch / 2)
21         else:
22             t.color('sienna')  # 赭(zhě)色
23             t.pensize(branch / 10)  # 6
24         t.forward(branch)
25         a = 1.5 * random.random()
26         t.right(20 * a)
27         b = 1.5 * random.random()
28         Tree(branch - 10 * b, t)
29         t.left(40 * a)
30         Tree(branch - 10 * b, t)
31         t.right(20 * a)
32         t.up()
33         t.backward(branch)
34         t.down()
35 
36 # 掉落的花瓣
37 def Petal(m, t):
38     for i in range(m):
39         a = 200 - 400 * random.random()
40         b = 10 - 20 * random.random()
41         t.up()
42         t.forward(b)
43         t.left(90)
44         t.forward(a)
45         t.down()
46         t.color('lightcoral')  # 淡珊瑚色
47         t.circle(1)
48         t.up()
49         t.backward(a)
50         t.right(90)
51         t.backward(b)
52 
53 # 绘图区域
54 t = T.Turtle()
55 # 画布大小
56 w = T.Screen()
57 t.hideturtle()  # 隐藏画笔
58 t.getscreen().tracer(5, 0)
59 w.screensize(bg='wheat')  # wheat小麦
60 t.left(90)
61 t.up()
62 t.backward(150)
63 t.down()
64 t.color('sienna')
65 
66 # 画樱花的躯干
67 Tree(60, t)
68 # 掉落的花瓣
69 Petal(200, t)
70 w.exitonclick()

 

2. 飘落效果

 1 from turtle import *
 2 from random import *
 3 from math import *
 4 
 5 def tree(n,l):
 6     pd()#下笔
 7     #阴影效果
 8     t = cos(radians(heading()+45))/8+0.25
 9     pencolor(t,t,t)
10     pensize(n/3)
11     forward(l)#画树枝
12 
13     if n>0:
14         b = random()*15+10 #右分支偏转角度
15         c = random()*15+10 #左分支偏转角度
16         d = l*(random()*0.25+0.7) #下一个分支的长度
17         #右转一定角度,画右分支
18         right(b)
19         tree(n-1,d)
20         #左转一定角度,画左分支
21         left(b+c)
22         tree(n-1,d)
23         #转回来
24         right(c)
25     else:
26         #画叶子
27         right(90)
28         n=cos(radians(heading()-45))/4+0.5
29         pencolor(n,n*0.8,n*0.8)
30         circle(3)
31         left(90)
32         #添加0.3倍的飘落叶子
33         if(random()>0.7):
34             pu()
35             #飘落
36             t = heading()
37             an = -40 +random()*40
38             setheading(an)
39             dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2)
40             forward(dis)
41             setheading(t)
42             #画叶子
43             pd()
44             right(90)
45             n = cos(radians(heading()-45))/4+0.5
46             pencolor(n*0.5+0.5,0.4+n*0.4,0.4+n*0.4)
47             circle(2)
48             left(90)
49             pu()
50             #返回
51             t=heading()
52             setheading(an)
53             backward(dis)
54             setheading(t)
55     pu()
56     backward(l)#退回
57 
58 bgcolor(0.5,0.5,0.5)#背景色
59 ht()#隐藏turtle
60 speed(0)#速度 1-10渐进,0 最快
61 tracer(0,0)
62 pu()#抬笔
63 backward(100)
64 left(90)#左转90度
65 pu()#抬笔
66 backward(300)#后退300
67 tree(12,100)#递归7层
68 done()

 

3. 暗色效果

 1 from turtle import *
 2 from random import *
 3 from math import *
 4 
 5 def tree(n, l):
 6     pd()
 7     t = cos(radians(heading() + 45)) / 8 + 0.25
 8     pencolor(t, t, t)
 9     pensize(n / 4)
10     forward(l)
11     if n > 0:
12         b = random() * 15 + 10
13         c = random() * 15 + 10
14         d = l * (random() * 0.35 + 0.6)
15         right(b)
16         tree(n - 1, d)
17         left(b + c)
18         tree(n - 1, d)
19         right(c)
20     else:
21         right(90)
22         n = cos(radians(heading() - 45)) / 4 + 0.5
23         pencolor(n, n, n)
24         circle(2)
25         left(90)
26     pu()
27     backward(l)
28 bgcolor(0.5, 0.5, 0.5)
29 ht()
30 speed(0)
31 tracer(0, 0)
32 left(90)
33 pu()
34 backward(300)
35 tree(13, 100)
36 done()

 

4. 动态画出玫瑰花

  1 from turtle import *
  2 import time
  3 
  4 setup(1000,800,0,0)
  5 speed(0)
  6 penup()
  7 seth(90)
  8 fd(340)
  9 seth(0)
 10 pendown()
 11 
 12 speed(5)
 13 begin_fill()
 14 fillcolor('red')
 15 circle(50,30)
 16 
 17 for i in range(10):
 18     fd(1)
 19     left(10)
 20 
 21 circle(40,40)
 22 
 23 for i in range(6):
 24     fd(1)
 25     left(3)
 26 
 27 circle(80,40)
 28 
 29 for i in range(20):
 30     fd(0.5)
 31     left(5)
 32 
 33 circle(80,45)
 34 
 35 for i in range(10):
 36     fd(2)
 37     left(1)
 38 
 39 circle(80,25)
 40 
 41 for i in range(20):
 42     fd(1)
 43     left(4)
 44 
 45 circle(50,50)
 46 
 47 time.sleep(0.1)
 48 
 49 circle(120,55)
 50 
 51 speed(0)
 52 
 53 seth(-90)
 54 fd(70)
 55 
 56 right(150)
 57 fd(20)
 58 
 59 left(140)
 60 circle(140,90)
 61 
 62 left(30)
 63 circle(160,100)
 64 
 65 left(130)
 66 fd(25)
 67 
 68 penup()
 69 right(150)
 70 circle(40,80)
 71 pendown()
 72 
 73 left(115)
 74 fd(60)
 75 
 76 penup()
 77 left(180)
 78 fd(60)
 79 pendown()
 80 
 81 end_fill()
 82 
 83 right(120)
 84 circle(-50,50)
 85 circle(-20,90)
 86 
 87 speed(1)
 88 fd(75)
 89 
 90 speed(0)
 91 circle(90,110)
 92 
 93 penup()
 94 left(162)
 95 fd(185)
 96 left(170)
 97 pendown()
 98 circle(200,10)
 99 circle(100,40)
100 circle(-52,115)
101 left(20)
102 circle(100,20)
103 circle(300,20)
104 speed(1)
105 fd(250)
106 
107 penup()
108 speed(0)
109 left(180)
110 fd(250)
111 circle(-300,7)
112 right(80)
113 circle(200,5)
114 pendown()
115 
116 left(60)
117 begin_fill()
118 fillcolor('green')
119 circle(-80,100)
120 right(90)
121 fd(10)
122 left(20)
123 circle(-63,127)
124 end_fill()
125 
126 penup()
127 left(50)
128 fd(20)
129 left(180)
130 
131 pendown()
132 circle(200,25)
133 
134 penup()
135 right(150)
136 
137 fd(180)
138 
139 right(40)
140 pendown()
141 begin_fill()
142 fillcolor('green')
143 circle(-100,80)
144 right(150)
145 fd(10)
146 left(60)
147 circle(-80,98)
148 end_fill()
149 
150 penup()
151 left(60)
152 fd(13)
153 left(180)
154 
155 pendown()
156 speed(1)
157 circle(-200,23)
158 
159 
160 
161 exitonclick()

 

posted @ 2021-12-23 15:46  admin-xiaoli  阅读(343)  评论(0编辑  收藏  举报