分享

如何用Python画一棵漂亮的树2.0

 hdzgx 2019-12-24

参考原文

这两天学python的时候,发现turtle库很好玩,百度后发现一个画树的文章,我把代码拿来改了下,感觉还不错,像极了樱花

 

下面是我参考原文做了些修改后的代码:

  1. from turtle import *
  2. from random import *
  3. from math import *
  4. class Tree:
  5. def __init__(self):
  6. setup(1000, 500)
  7. bgcolor(1, 1, 1) # 背景色
  8. # ht() # 隐藏turtle
  9. speed(10) # 速度 1-10渐进,0 最快
  10. # tracer(1, 100) # 设置绘图屏幕刷新频率,参数1设置在正常刷新频次的第参数1次刷新,参数2设置每次刷新的时延
  11. tracer(0, 0)
  12. pu() # 抬笔
  13. backward(100)
  14. # 保证笔触箭头方向始终不向下,此处使其左转90度,而不是右转
  15. left(90) # 左转90度
  16. backward(300) # 后退300
  17. def tree(self, n, l):
  18. pd() # 下笔
  19. # 阴影效果
  20. t = cos(radians(heading()+45))/8+0.25
  21. pencolor(t, t, t)
  22. pensize(n/1.2)
  23. forward(l) # 画树枝
  24. if n > 0:
  25. b = random()*15+10 # 右分支偏转角度
  26. c = random()*15+10 # 左分支偏转角度
  27. d = l*(random()*0.25+0.7) # 下一个分支的长度
  28. # 右转一定角度,画右分支
  29. right(b)
  30. self.tree(n-1, d)
  31. # 左转一定角度,画左分支
  32. left(b+c)
  33. self.tree(n-1, d)
  34. # 转回来
  35. right(c)
  36. else:
  37. # 画叶子
  38. right(90)
  39. n = cos(radians(heading()-45))/4+0.5
  40. pencolor(n,n*0.8,n*0.8)
  41. fillcolor(n,n*0.8,n*0.8)
  42. begin_fill()
  43. circle(3)
  44. left(90)
  45. end_fill()
  46. # 添加0.3倍的飘落叶子
  47. if random() > 0.7:
  48. pu()
  49. # 飘落
  50. t = heading()
  51. an = -40 + random()*40
  52. setheading(an)
  53. dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2)
  54. forward(dis)
  55. setheading(t)
  56. # 画叶子
  57. pd()
  58. right(90)
  59. n = cos(radians(heading()-45))/4+0.5
  60. pencolor(n*0.5+0.5,0.4+n*0.4,0.4+n*0.4)
  61. fillcolor(n, n * 0.8, n * 0.8)
  62. begin_fill()
  63. circle(2)
  64. left(90)
  65. end_fill()
  66. pu()
  67. # 返回
  68. t = heading()
  69. setheading(an)
  70. backward(dis)
  71. setheading(t)
  72. # pass
  73. pu()
  74. backward(l) # 退回
  75. def main():
  76. tree = Tree()
  77. tree.tree(12, 100) # 递归7层
  78. done()
  79. if __name__ == '__main__':
  80. main()

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多