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()
本文来自博客园,作者:{admin-xiaoli},转载请注明原文链接:{https://www.cnblogs.com/crackerroot}
分类:
Python
标签:
Python之动态画图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架