• 【中秋征文】使用Python创意中秋节画月饼《花好月圆》


            大家好,我是猿童学🐵,又是一年中秋至——花好月圆夜,祝大家中秋节快乐!欢迎收看中秋创造第一期。今年是我在CSDN第一次过中秋节,特意为此去学习了用Python来画月饼,不仅可以学习而且在制作的过程还很有趣。本文将使用turtle(海龟)来画月饼。turtle库是Python重要的标准库之一,是最有价值的程序设计入门实践库,它是程序设计入门层面最常用的基本绘图库。

    你 ♥ 中的月饼是怎么样的呢?来和我一起画出他的模样吧!

    一、效果展示

    话不多说先上效果

    为了更有意境我加了个完美的背景来衬托出月饼的好看

    我的月饼画的不圆的原因是我故意的,为什么呢?

    因为月有阴晴圆缺啊!哈哈!😅

    上面是直接画的,没有填充,接下来我们画一个有填充的。

    也可以添加好看的背景噢。

    二、程序代码

    代码将在下面解释,可以看着代码对应下面的函数解释。

    第一种:

    1. import turtle
    2. import math
    3. turtle.title("照彻乾坤,印透山河")
    4. turtle.bgpic("yueliang/1.png")
    5. p = turtle.Turtle()
    6. p.pensize(4)
    7. p.speed(3)
    8. #做月饼的面
    9. def ellipse(a,b,n=500,c='#CD950C'):
    10. p.penup()
    11. p.setpos(a,0)
    12. color = p.color(c)
    13. p.pendown()
    14. for i in range(n):
    15. radian = 2 * math.pi /n
    16. theta = (i+1) * radian
    17. next_point = (a * math.cos(theta)),b * math.sin(theta)
    18. p.setpos(next_point)
    19. ellipse(300,200,c='#CD950C')
    20. ellipse(296,196,c='#FFB90F')
    21. ellipse(292,192,c='#FFD700')
    22. #做月饼的底
    23. turtle.penup()
    24. turtle.goto(-10,-300)
    25. turtle.color("#CD950C")
    26. turtle.pensize(6)
    27. turtle.pendown()
    28. turtle.circle(430,42)#33
    29. turtle.circle(420,-84)#-60
    30. turtle.goto(-296,-40)
    31. turtle.penup()
    32. turtle.goto(296,-40)
    33. turtle.pendown()
    34. turtle.right(54)
    35. turtle.forward(151)
    36. turtle.penup()
    37. turtle.goto(0,0)
    38. turtle.pendown()
    39. def draw(a1,b1,a2,b2,f='#CD950C'):#边角的2个点,分别是(a1,b1),(a2,b2)
    40. turtle.penup()
    41. turtle.goto(a1,b1)
    42. turtle.pensize(6)
    43. turtle.color(f)
    44. turtle.pendown()
    45. turtle.goto(a2,b1)
    46. turtle.goto(a2,b2)
    47. turtle.penup()
    48. return()
    49. #下面是4个角图案
    50. draw(260,78,130,170,'#FFD700')
    51. draw(250,90,150,160)
    52. draw(240,102,172,150)
    53. draw(230,114,194,140)
    54. draw(-260,-78,-130,-170,'#FFD700')
    55. draw(-250,-90,-150,-160)
    56. draw(-240,-102,-172,-150)
    57. draw(-230,-114,-194,-140)
    58. draw(260,-78,130,-170,'#FFD700')
    59. draw(250,-90,150,-160)
    60. draw(240,-102,172,-150)
    61. draw(230,-114,194,-140)
    62. draw(-262,78,-130,170,'#FFD700')
    63. draw(-250,90,-150,160)
    64. draw(-240,102,-172,150)
    65. draw(-230,114,-194,140)
    66. turtle.penup()
    67. turtle.pensize(6)
    68. turtle.color("#CD950C")
    69. turtle.goto(-270,66)
    70. turtle.pendown()
    71. turtle.goto(-150,66)
    72. turtle.goto(-150,-66)
    73. turtle.goto(-270,-66)
    74. turtle.goto(-270,-54)
    75. turtle.goto(-170,-54)
    76. turtle.goto(-170,54)
    77. turtle.goto(-276,54)
    78. turtle.goto(-276,42)
    79. turtle.goto(-190,42)
    80. turtle.goto(-190,-42)
    81. turtle.goto(-276,-42)
    82. turtle.goto(-276,-30)
    83. turtle.goto(-210,-30)
    84. turtle.goto(-210,30)
    85. turtle.goto(-279,30)
    86. turtle.goto(-279,18)
    87. turtle.goto(-230,18)
    88. turtle.goto(-230,-18)
    89. turtle.goto(-282,-18)
    90. turtle.goto(-282,-2)
    91. turtle.goto(-258,-2)
    92. turtle.penup()
    93. turtle.penup()
    94. turtle.goto(-128,-2)
    95. turtle.pendown()
    96. turtle.color("#FFD700")
    97. turtle.pensize(2)
    98. turtle.goto(126,-2)
    99. turtle.penup()
    100. turtle.penup()
    101. turtle.pensize(6)
    102. turtle.color("#CD950C")
    103. turtle.goto(270,66)
    104. turtle.pendown()
    105. turtle.goto(150,66)
    106. turtle.goto(150,-66)
    107. turtle.goto(270,-66)
    108. turtle.goto(270,-54)
    109. turtle.goto(170,-54)
    110. turtle.goto(170,54)
    111. turtle.goto(276,54)
    112. turtle.goto(276,42)
    113. turtle.goto(190,42)
    114. turtle.goto(190,-42)
    115. turtle.goto(276,-42)
    116. turtle.goto(276,-30)
    117. turtle.goto(210,-30)
    118. turtle.goto(210,30)
    119. turtle.goto(279,30)
    120. turtle.goto(279,18)
    121. turtle.goto(230,18)
    122. turtle.goto(230,-18)
    123. turtle.goto(282,-18)
    124. turtle.goto(282,-2)
    125. turtle.goto(258,-2)
    126. turtle.penup()
    127. turtle.penup()
    128. turtle.pensize(6)
    129. turtle.color("#CD950C")
    130. turtle.goto(-110,174)
    131. turtle.pendown()
    132. turtle.goto(-110,90)
    133. turtle.goto(110,90)
    134. turtle.goto(110,174)
    135. turtle.goto(90,174)
    136. turtle.goto(90,102)
    137. turtle.goto(-90,102)
    138. turtle.goto(-90,176)
    139. turtle.goto(-70,176)
    140. turtle.goto(-70,114)
    141. turtle.goto(70,114)
    142. turtle.goto(70,176)
    143. turtle.goto(50,176)
    144. turtle.goto(50,126)
    145. turtle.goto(-50,126)
    146. turtle.goto(-50,180)
    147. turtle.goto(-30,180)
    148. turtle.goto(-30,138)
    149. turtle.goto(30,138)
    150. turtle.goto(30,182)
    151. turtle.goto(10,182)
    152. turtle.goto(-10,182)
    153. turtle.goto(-10,150)
    154. turtle.goto(10,150)
    155. turtle.goto(10,166)
    156. turtle.penup()
    157. turtle.penup()
    158. turtle.goto(10,76)
    159. turtle.pendown()
    160. turtle.pensize(2)
    161. turtle.color("#FFD700")
    162. turtle.goto(10,-75)
    163. turtle.penup()
    164. turtle.penup()
    165. turtle.pensize(6)
    166. turtle.color("#CD950C")
    167. turtle.goto(-110,-174)
    168. turtle.pendown()
    169. turtle.goto(-110,-90)
    170. turtle.goto(110,-90)
    171. turtle.goto(110,-174)
    172. turtle.goto(90,-174)
    173. turtle.goto(90,-102)
    174. turtle.goto(-90,-102)
    175. turtle.goto(-90,-176)
    176. turtle.goto(-70,-176)
    177. turtle.goto(-70,-114)
    178. turtle.goto(70,-114)
    179. turtle.goto(70,-176)
    180. turtle.goto(50,-176)
    181. turtle.goto(50,-126)
    182. turtle.goto(-50,-126)
    183. turtle.goto(-50,-180)
    184. turtle.goto(-30,-180)
    185. turtle.goto(-30,-138)
    186. turtle.goto(30,-138)
    187. turtle.goto(30,-182)
    188. turtle.goto(10,-182)
    189. turtle.goto(-10,-182)
    190. turtle.goto(-10,-150)
    191. turtle.goto(10,-150)
    192. turtle.goto(10,-166)
    193. turtle.penup()
    194. #中间金色边框
    195. turtle.penup()
    196. turtle.goto(-130,170)
    197. draw(-130,78,130,-78,'#FFD700')
    198. draw(130,-78,-130,78,'#FFD700')
    199. turtle.penup()
    200. #中间金色字体
    201. turtle.penup()
    202. turtle.speed(1)
    203. turtle.penup()
    204. turtle.goto(-100,0)
    205. turtle.pendown()
    206. turtle.color('#D2691E')
    207. turtle.write("花",font=("隶书",60,"bold"))
    208. turtle.penup()
    209. turtle.goto(30,0)
    210. turtle.pendown()
    211. turtle.write("好",font=("隶书",60,"bold"))
    212. turtle.penup()
    213. turtle.goto(-100,-80)
    214. turtle.pendown()
    215. turtle.write("月",font=("隶书",60,"bold"))
    216. turtle.penup()
    217. turtle.goto(30,-80)
    218. turtle.pendown()
    219. turtle.write("圆",font=("隶书",60,"bold"))
    220. turtle.penup()
    221. p.hideturtle()
    222. turtle.mainloop()

    第二种:

    1. import turtle
    2. turtle.title("祝大家中秋节快乐!")
    3. # turtle.bgpic("hua/1.png")
    4. turtle.speed(100)
    5. turtle.color("#F5E16F")
    6. for i in range(20):
    7. # 顺时针移动18度
    8. turtle.right(18)
    9. turtle.begin_fill()
    10. # 向前移动的距离
    11. turtle.forward(220)
    12. # 画半径为 40 的半圆
    13. turtle.circle(40, 180)
    14. # 画完半圆之后回到(0,0)
    15. turtle.goto(0, 0)
    16. turtle.right(360)
    17. turtle.end_fill()
    18. # 设置画笔粗细
    19. turtle.pensize(20)
    20. # 填充颜色(外部、内部)
    21. turtle.color("#F5E16F", "#FF9933")
    22. turtle.goto(0, -200)
    23. # 准备开始填充
    24. turtle.begin_fill()
    25. turtle.circle(200)
    26. # 填充结束
    27. turtle.end_fill()
    28. turtle.right(360)
    29. turtle.color('#F5E16F')
    30. turtle.goto(0, -180)
    31. for i in range(12):
    32. turtle.begin_fill()
    33. turtle.circle(60, 120)
    34. turtle.left(180)
    35. turtle.circle(60, 120)
    36. turtle.end_fill()
    37. turtle.penup()
    38. turtle.goto(-80,-40)
    39. turtle.pendown()
    40. turtle.color("#F5E16F")
    41. turtle.write("团圆", font=("隶书", 60, "bold"))
    42. turtle.mainloop()

    三、素材背景

    将图片放在文件夹中

    本文将1.png放在yueliang文件夹中

    1.png

    2.png

    3.png 

     更多的背景可以在网上搜索获得。

    四、原理解释

    1、概念

            turtle(海龟)是Python重要的标准库之一,它能够进行基本的图形绘制,其概念诞生于1969年。turtle是最有价值的程序设计入门实践库,它是程序设计入门层面最常用的基本绘图库。

    turtle的绘图原理:

    • 有一只海龟处于画布正中心,由程序控制在画布上游走;
    • 海龟走过的轨迹形成了绘制的图形
    • 海龟由程序控制,可改变其大小,颜色等

    使用 import 保留字对 turtle 库的引用以下方式:

    import turtle

    2、函数

    窗体函数

    turtle.setup()函数与窗体有关,定义如下:
    turtle.setup(width,height,startx,starty)
    作用:设置主窗体的大小和位置

    参数:
    width:窗口宽度。如果值是整数,表示像素值;如果值是小数,表示窗口宽度与屏幕的比例
    height:窗口高度。如果值是整数,表示像素值;如果值是小数,表示窗口高度与屏幕的比例
    startx:窗口左侧与屏幕右侧的像素距离。如果值是None,窗口位于屏幕水平正中央。

     画笔状态函数

    函数描述
    pendown( )放下画笔
    penup()提起画笔
    pensize(width)设置画笔线条的粗细为指定大小
    pencolor()设置画笔的颜色
    color( a,b)同时设置画笔和填充颜色
    begin_fill()填充恩形前,调用该方法
    end_fill( )填充图形结束
    filling()返回填充的状态,True为填充。False为未填充
    clear( )清空当前窗口,但不改变当前画笔的位置
    reset()清空当前窗口,并重置位置等状态为默认值
    screensize( )设置画布窗口的宽度、高度和背昱颜色
    hideturtle()隐藏画笔的turtle形状
    showturtle( )显示画笔的turtle形状
    isvisible( )如果turtle可见,则返回True
    write(str,font=None)输出font字体的字符串

    画笔运动函数

    函数描述
    fd(distance)沿着当前方向前进指定距离
    bk(distance)沿着当前相反方向后退指定距离
    right(angle)向右旋转angle角度
    left(angle)向左旋转angle角度
    goto(x,y)移动到绝对坐标xy)处
    sex(x)修改画笔的横坐标到次,纵坐标不变
    sety(y)修改画笔的纵坐标到y,横坐标不变
    seth(angle)设置当前朝向为angle角度
    home()设置当前画笔位置为原点,朝向东
    circle(radius,e)绘制一个指定半径r和角度e的圆或新形
    dot(r.color)绘制一个指定半径r和预色color的圆点
    undo( )撤销画笔的最后一步动作
    speed()设置画笔的绘制速度,参数为0~10之间

    颜色代码大全

     可以选择自己喜欢的颜色画。

    颜色参考:CSS 颜色代码大全 CSS颜色对照表

      往期:

    【中秋征文】使用Python创意中秋节画月饼《花好月圆》

    【中秋征文】使用Python中秋节嫦娥投食游戏《千里婵娟》

  • 相关阅读:
    【剪映专业版】13快速为视频配好音:清晰、无噪声、对齐
    Python模糊匹配(fuzzywuzzy package)
    vue+高德地图实现区域掩模
    【毕业设计】天气数据分析系统 - python 大数据
    linux udp 广播recvfrom 返回 -1 错误码是 11 EAGAIN Resource temporarily unavailable
    7.11 特征值
    第三章 处理机调度练习
    sql事务-1
    leetcode算法题--数值的整数次方
    面试题精讲:你所不知道的Lambda表达式和常用的函数式接口
  • 原文地址:https://blog.csdn.net/qq_21402983/article/details/126601143