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

x33g5p2x  于2021-11-23 转载在 Python  
字(4.4k)|赞(0)|评价(0)|浏览(557)

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

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

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

飘落效果
效果图:

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

暗色效果
效果:

代码

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

two 玫瑰花
效果(有绘制过程)

代码

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

three 圣诞树

圣诞树 (动态生成效果)

代码:

  1. from turtle import *
  2. import random
  3. import time
  4. n = 100.0
  5. speed("fastest")
  6. screensize(bg='seashell')
  7. left(90)
  8. forward(3*n)
  9. color("orange", "yellow")
  10. begin_fill()
  11. left(126)
  12. for i in range(5):
  13. forward(n/5)
  14. right(144)
  15. forward(n/5)
  16. left(72)
  17. end_fill()
  18. right(126)
  19. color("dark green")
  20. backward(n*4.8)
  21. def tree(d, s):
  22. if d <= 0: return
  23. forward(s)
  24. tree(d-1, s*.8)
  25. right(120)
  26. tree(d-3, s*.5)
  27. right(120)
  28. tree(d-3, s*.5)
  29. right(120)
  30. backward(s)
  31. tree(15, n)
  32. backward(n/2)
  33. for i in range(200):
  34. a = 200 - 400 * random.random()
  35. b = 10 - 20 * random.random()
  36. up()
  37. forward(b)
  38. left(90)
  39. forward(a)
  40. down()
  41. if random.randint(0, 1) == 0:
  42. color('tomato')
  43. else:
  44. color('wheat')
  45. circle(2)
  46. up()
  47. backward(a)
  48. right(90)
  49. backward(b)
  50. time.sleep(60)

了解更多获取PythonWeb开发,数据分析,爬虫,人工智能等学习知识,私聊学习!

相关文章