您现在的位置是:首页 > 技术教程 正文

【python】python turtle绘制坤坤打球

admin 阅读: 2024-03-24
后台-插件-广告管理-内容页头部广告(手机)

一、效果图:

   二、准备工作

(1)、导入必要的模块:

       代码首先导入了需要使用的模块:requests、lxml和csv。

  1. import requests
  2. from lxml import etree
  3. import csv

        如果出现模块报错

c124a1693bfc457ba1f2909ee9d299fc.png

        进入控制台输入:建议使用国内镜像源

pip install 模块名称 -i https://mirrors.aliyun.com/pypi/simple

         我大致罗列了以下几种国内镜像源:

  1. 清华大学
  2. https://pypi.tuna.tsinghua.edu.cn/simple
  3. 阿里云
  4. https://mirrors.aliyun.com/pypi/simple/
  5. 豆瓣
  6. https://pypi.douban.com/simple/
  7. 百度云
  8. https://mirror.baidu.com/pypi/simple/
  9. 中科大
  10. https://pypi.mirrors.ustc.edu.cn/simple/
  11. 华为云
  12. https://mirrors.huaweicloud.com/repository/pypi/simple/
  13. 腾讯云
  14. https://mirrors.cloud.tencent.com/pypi/simple/

三、介绍

        通过 Python 的 Turtle 模块,我们可以轻松地在屏幕上绘制各种形状和动画效果。本次项目旨在利用 Turtle 模块创建一个坤坤打篮球的动画效果

四、详解代码

        首先,导入了必要的库:

  1. from turtle import *
  2. from math import *

        这里使用了turtle库来进行图形绘制,同时使用math库来进行数学计算。

        接下来是定义了两个函数ty_c和ty,用来绘制填充颜色的椭圆形和不填充颜色的椭圆形。这两个函数主要用到了cos和sin等三角函数来计算椭圆上的点的位置,以及控制画笔的移动。

1. 函数 ty_c

  1. def ty_c(x, y, sita, a, b, p, q, c):
  2. fillcolor(c)
  3. si = 2 * pi / 100
  4. penup()
  5. goto(x + a * cos(sita), y + a * sin(sita))
  6. pendown()
  7. t = 0
  8. for i in range(201):
  9. if i * si + sita <= p:
  10. penup()
  11. goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita), y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))
  12. pendown()
  13. elif p <= i * si + sita <= q + 2 * pi / 100:
  14. if t == 0:
  15. begin_fill()
  16. t = 1
  17. goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita), y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))
  18. end_fill()
  • 这个函数用于绘制填充颜色的椭圆形。
  • 参数说明:
    • x 和 y:椭圆中心点的坐标
    • sita:旋转角度
    • a 和 b:椭圆的长轴和短轴
    • p 和 q:起始角度和结束角度
    • c:填充颜色
  • 主要步骤:
    1. 设置填充颜色并准备绘制
    2. 移动画笔到起始点
    3. 根据角度范围绘制椭圆形
    4. 结束填充

2. 函数 ty

  1. def ty(x, y, sita, a, b, p, q):
  2. si = 2 * pi / 100
  3. penup()
  4. goto(x + a * cos(sita), y + a * sin(sita))
  5. pendown()
  6. for i in range(201):
  7. if i * si + sita < p:
  8. penup()
  9. goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita), y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))
  10. pendown()
  11. elif p <= i * si + sita <= q + 2 * pi / 100:
  12. goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita), y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))
  • 这个函数用于绘制非填充颜色的椭圆形。
  • 参数和步骤与函数 ty_c 类似,不同之处在于这里没有填充颜色的操作。

        然后是主程序部分,主要包括以下绘制过程:

  1. 绘制篮球:

    • 首先设置了画笔的粗细和颜色。
    • 调用了ty_c和ty函数来绘制篮球的图案,包括篮球的表面和阴影等部分。
  2. 绘制人物头像:

    • 设置了画笔的粗细和颜色。
    • 调用了ty_c函数来绘制人物头像的脸部、眼睛、嘴巴、腮红、领口、衣服等元素。

        最后使用done()函数来保持图形窗口不关闭。

        整体来说,这段代码利用了turtle库中的绘图功能,通过控制画笔的移动和路径来绘制出篮球和人物头像的效果。

绘制卡通人物

  1. 首先,我们使用ty_c函数绘制了一个篮球的图案,并填充了橙色的颜色。然后使用ty函数绘制了篮球的纹理,使其看起来更加逼真。

  2. 接着,我们使用ty_c函数绘制了一个黄色的脸部图案。然后绘制了两个白色的眼睛,并在眼睛中间分别绘制了黑色的眼珠,使眼睛看起来更加生动。

  3. 紧接着,使用ty_c函数绘制了一个橙色的嘴巴,并绘制了嘴巴的轮廓,使其看起来更加立体。

  4. 接下来,我们使用红色的颜料在脸部两侧绘制了腮红,增加了卡通人物的可爱程度。

  5. 最后,我们绘制了卡通人物的衣服、领口和肩带,使整个图案更加完整。

五、完整代码:

  1. from turtle import *
  2. from math import *
  3. def ty_c(x, y, sita, a, b, p, q, c):
  4. fillcolor(c)
  5. si = 2 * pi / 100
  6. penup()
  7. goto(x + a * cos(sita), y + a * sin(sita))
  8. pendown()
  9. t = 0
  10. for i in range(201):
  11. if i * si + sita <= p:
  12. penup()
  13. goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita) \
  14. , y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))
  15. pendown()
  16. elif p <= i * si + sita <= q + 2 * pi / 100:
  17. if t == 0:
  18. begin_fill()
  19. t = 1
  20. goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita) \
  21. , y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))
  22. end_fill()
  23. def ty(x, y, sita, a, b, p, q):
  24. si = 2 * pi / 100
  25. penup()
  26. goto(x + a * cos(sita), y + a * sin(sita))
  27. pendown()
  28. for i in range(201):
  29. if i * si + sita < p:
  30. penup()
  31. goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita) \
  32. , y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))
  33. pendown()
  34. elif p <= i * si + sita <= q + 2 * pi / 100:
  35. goto(x + a * cos(i * si) * cos(sita) - b * sin(i * si) * sin(sita) \
  36. , y + a * cos(i * si) * sin(sita) + b * sin(i * si) * cos(sita))
  37. speed(0)
  38. hideturtle()
  39. # 篮球
  40. pensize(10)
  41. pencolor('black')
  42. ty_c(350, -267, 0, 161, 161, 0, 2 * pi, '#ff9900')
  43. ty(350, -267 + 161 + 50, 0, 161, 161, 7 * pi / 6 + pi / 12, 11 * pi / 6 - pi / 12)
  44. ty(350, -267 - 161 - 50, 0, 161, 161, pi / 6 + pi / 12, 5 * pi / 6 - pi / 12)
  45. ty(350, -267 + 161 + 330, 0, 500, 500, 8.5 * pi / 6, 9.5 * pi / 6)
  46. # 脸
  47. pensize(20)
  48. ty_c(0, 0, 0, 657 / 2, 576 / 2, 0, 2 * pi, '#ffcc00')
  49. # 眼睛
  50. pensize(22)
  51. ty_c(55, 52, 0, 106, 104, 0, 2 * pi, 'white')
  52. ty_c(-165, 60, 0, 101, 99, 0, 2 * pi, 'white')
  53. pensize(20)
  54. ty_c(4, 79, 0, 14, 14, 0, 2 * pi, 'black')
  55. ty_c(-201, 80, 0, 14, 14, 0, 2 * pi, 'black')
  56. # 嘴巴
  57. pensize(12)
  58. ty_c(-66, -76, 0, 102, 62, 0, 2 * pi, '#ff6600')
  59. penup()
  60. goto(-155, -50)
  61. pendown()
  62. goto(-134, -64)
  63. goto(-115, -74)
  64. goto(-90, -82)
  65. goto(-67, -86)
  66. goto(-47, -85)
  67. goto(-25, -82)
  68. goto(0, -77)
  69. goto(15, -66)
  70. goto(25, -55)
  71. # 腮红
  72. pensize(1)
  73. pencolor('red')
  74. ty_c(-256, -90, 15 * pi / 180, 49, 66, 0, 2 * pi + 15 * pi / 180, 'red')
  75. ty_c(201, -105, 0, 73, 75, 0, 2 * pi, 'red')
  76. # 领口
  77. color('black', 'black')
  78. pensize(10)
  79. penup()
  80. goto(-275, -227)
  81. pendown()
  82. begin_fill()
  83. goto(-241, -209)
  84. goto(-189, -233)
  85. goto(-166, -260)
  86. goto(-127, -272)
  87. goto(-88, -252)
  88. goto(-49, -233)
  89. goto(-19, -227)
  90. goto(51, -237)
  91. goto(108, -242)
  92. goto(168, -242)
  93. goto(210, -233)
  94. goto(250, -206)
  95. goto(252, -254)
  96. goto(216, -269)
  97. goto(-13, -353)
  98. goto(-65, -362)
  99. goto(-109, -356)
  100. goto(-178, -317)
  101. goto(-214, -296)
  102. goto(-246, -266)
  103. goto(-272, -245)
  104. goto(-275, -227)
  105. end_fill()
  106. # 衣服
  107. penup()
  108. goto(-244, -287)
  109. pendown()
  110. begin_fill()
  111. goto(-269, -314)
  112. goto(-310, -405)
  113. goto(-304, -410)
  114. goto(-21, -416)
  115. goto(317, -410)
  116. goto(331, -398)
  117. goto(323, -381)
  118. goto(319, -356)
  119. goto(315, -320)
  120. goto(275, -266)
  121. goto(263, -257)
  122. pensize(15)
  123. pencolor('#c0c0c0')
  124. goto(252, -254)
  125. goto(216, -269)
  126. goto(-13, -353)
  127. pensize(13)
  128. goto(-65, -362)
  129. goto(-109, -356)
  130. pensize(10)
  131. goto(-178, -317)
  132. goto(-214, -296)
  133. goto(-246, -284)
  134. end_fill()
  135. # 肩带
  136. penup()
  137. goto(-206, -310)
  138. pendown()
  139. pensize(30)
  140. goto(-183, -363)
  141. goto(-180, -384)
  142. goto(-184, -414)
  143. penup()
  144. goto(229, -285)
  145. pendown()
  146. goto(203, -360)
  147. pensize(34)
  148. goto(190, -415)
  149. penup()
  150. goto(-115, -360)
  151. pendown()
  152. pensize(8)
  153. goto(-96, -411)
  154. goto(-75, -413)
  155. goto(18, -371)
  156. goto(69, -341)
  157. goto(105, -325)
  158. pensize(12)
  159. goto(177, -297)
  160. # 中分
  161. pencolor('#808080')
  162. pensize(1)
  163. penup()
  164. goto(67, 393)
  165. pendown()
  166. fillcolor('#808080')
  167. begin_fill()
  168. goto(43, +419)
  169. goto(13, +431)
  170. goto(-96, +426)
  171. goto(-156, +402)
  172. goto(-239, +336)
  173. goto(-277, +300)
  174. goto(-307, +263)
  175. goto(-372, +153)
  176. goto(-383, +101)
  177. goto(-373, +57)
  178. goto(-339, +38)
  179. goto(-298, +40)
  180. goto(-278, +61)
  181. goto(-236, +74)
  182. goto(-176, +103)
  183. goto(-163, +128)
  184. goto(-135, +224)
  185. goto(-95, +265)
  186. goto(-64, +271)
  187. goto(-30, +253)
  188. goto(22, +269)
  189. goto(61, 268)
  190. goto(75, 202)
  191. goto(93, 132)
  192. goto(108, 71)
  193. goto(136, 31)
  194. goto(171, 4)
  195. goto(236, -10)
  196. goto(277, -10)
  197. goto(323, -25)
  198. goto(363, -61)
  199. goto(404, -35)
  200. goto(423, 14)
  201. goto(453, 71)
  202. goto(457, 120)
  203. goto(441, 170)
  204. goto(398, 227)
  205. goto(331, 285)
  206. goto(283, 323)
  207. goto(232, 360)
  208. goto(168, 396)
  209. goto(122, 416)
  210. goto(87, 406)
  211. goto(67, 393)
  212. end_fill()
  213. pencolor('black')
  214. pensize(4)
  215. goto(-30, +253)
  216. done()

总结

        通过使用Python中的Turtle库,我们可以轻松绘制出精美的图案,无论是简单的几何图形还是复杂的卡通人物。Turtle库不仅适合初学者学习绘图,也可以用于创作出独特的艺术作品。希望本文对您了解如何使用Turtle库绘制卡通人物有所帮助!

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索