使用python中的turtle库同时画两只兔兔,方法是创建多线程。

设置双画笔

(调用的函数放在最后面)

y = turtle.Pen()    # 绘制左边的画笔
d = turtle.Pen()    # 绘制右边的画笔turtle.bgcolor(0.5, 0.5, 0.5)  # 背景色
turtle.screensize(1800, 1000)  # 画布尺寸
turtle.hideturtle()  # 隐藏画笔
# y._tracer(0, 0)  # 如果不想看动画直接看结果,把注释去掉t1 = threading.Thread(target=white_rabbit)
t2 = threading.Thread(target=black_rabbit)
t1.start()
t2.start()turtle.exitonclick()

此篇只贴图形函数代码,整个程序完整效果图:

动画效果是先画完树和雪花,再草地雪地,然后两只兔子,每一步都创建两个线程使两边并发绘制,最后加上中间爱心。因为在每个环节中某一边可能会更快画完,所以要用到两个互斥锁,控制一支画笔等另一只画完,保证下个环节依旧同时进行。这里用兔子绘制函数做演示:

mutex1 = threading.Lock()
mutex2 = threading.Lock()
def white_rabbit():mutex1.acquire()    # 上第一把锁...mutex2.release()    # 解第二把锁
def black_rabbit():mutex2.acquire()    # 上第二把锁...mutex1.release()    # 解第一把锁

樱花树和雪花都属于分型几何,分形是描述复杂几何形体结构的一种数学概念。分形几何的特点是:客观事物具有自相似的层次结构。在设计算法中主要运用的是迭代思想。

樱花树绘制函数

    def cherry(self, n, len):'''樱花二叉树:param n: 树迭代层数:param len: 树枝长度:return:'''y.pd()# 阴影效果t = cos(radians(y.heading() + 45)) / 8 + 0.25y.pencolor(t, t, t)y.pensize(n / 3)y.forward(len)  # 画树枝if n > 0:b = random() * 15 + 10  # 右分支偏转角度c = random() * 15 + 10  # 左分支偏转角度d = len * (random() * 0.25 + 0.7)  # 下一个分支的长度y.right(b)  # 右转一定角度,画右分支self.cherry(n - 1, d)y.left(b + c)   # 左转一定角度,画左分支self.cherry(n - 1, d)y.right(c)   # 转回来else:# 画叶子y.right(90)n = cos(radians(y.heading() - 45)) / 4 + 0.5y.pencolor(n, n * 0.8, n * 0.8)y.circle(3)y.left(90)# 添加0.3倍的飘落叶子if (random() > 0.7):y.pu()# 飘落t = y.heading()an = -40 + random() * 40y.setheading(an)dis = int(800 * random() * 0.5 + 400 * random() * 0.3 + 200 * random() * 0.2)y.forward(dis)y.setheading(t)# 画叶子y.pd()y.right(90)n = cos(radians(y.heading() - 45)) / 4 + 0.5y.pencolor(n * 0.5 + 0.5, 0.4 + n * 0.4, 0.4 + n * 0.4)y.circle(2)y.left(90)y.pu()# 返回t = y.heading()y.setheading(an)y.backward(dis)y.setheading(t)y.pu()y.backward(len)def draw_cherry(self):y.pu()y.goto(-520, -380)y.seth(0)y.left(90)y.pd()y.pensize(4)y.pencolor('black')y.forward(80)y.pu()self.cherry(12, 100)

科赫雪花绘制函数

def Koch_curve(self, n, len):'''科赫曲线(三分之一的雪花):param n: 分形次数:param len: 一段线段长度:return:'''if n == 0:d.forward(len)else:for i in [0, 60, -120, 60]:d.left(i)self.Koch_curve(n-1, len/3)def Koch_snowflake(self, n, len):
# 循环三次科赫曲线得到雪花for a in range(3):self.Koch_curve(n, len)d.right(120)def draw_snowflake(self):
# 画了三朵雪花d.pensize(2)d.color('white')d.pu()d.goto(300, 100)d.pd()self.Koch_snowflake(5, 400)d.pu()d.goto(100, 300)d.pd()self.Koch_snowflake(4, 200)d.pu()d.goto(700, 400)d.pd()self.Koch_snowflake(3, 100)

黑白兔绘制函数

RADIUS = 50
ANGLE = 50
W_X = -200
W_Y = -340
B_X = 200
B_Y = -340def white_rabbit():y.hideturtle()y.speed(4)y.pensize(3)# 头部y.color('white')y.pu()y.goto(W_X, W_Y)y.seth(0)y.pd()y.begin_fill()y.circle(RADIUS, 360)y.end_fill()# 耳朵y.pu()y.goto(RADIUS * sin(2 * ANGLE) + W_X, RADIUS * cos(2 * ANGLE) + RADIUS + W_Y)y.pd()y.seth(120)y.begin_fill()y.circle(-50, 60)y.circle(-10, 120)y.circle(-50, 55)y.pu()y.seth(0)y.forward(15)y.pd()y.seth(120)y.circle(-50, 55)y.circle(-10, 120)y.circle(-50, 62)y.end_fill()# 眼睛y.color('red')y.pu()y.seth(0)y.goto(-RADIUS * sin(ANGLE) + W_X, RADIUS + W_Y)y.pd()y.begin_fill()y.circle(5)y.pu()y.forward(2 * RADIUS * sin(ANGLE))y.pd()y.circle(-5)y.end_fill()# 身体y.color('white')y.pu()y.seth(0)y.goto(-RADIUS * sin(ANGLE) + 10 + W_X, 10 + W_Y)y.seth(-50)y.pd()y.begin_fill()y.circle(-130, 30)  # 1y.circle(-12, 140)  # 2y.circle(160, 40)  # 3y.circle(50, 75)  # 5y.circle(-10, 140)  # 6y.circle(-100, 45)  # 7# 尾巴y.seth(0)y.circle(10)# 背部y.seth(25)y.circle(-160, 35)y.end_fill()# 前腿y.pu()y.goto(W_X, -42 + W_Y)y.pd()y.seth(-130)y.begin_fill()y.fd(25)y.circle(-8, 110)y.fd(40)y.end_fill()# 后腿y.pu()y.goto(-145 + W_X, -50 + W_Y)y.pd()y.seth(-95)y.begin_fill()y.fd(15)y.circle(5, 150)y.fd(3)y.end_fill()def black_rabbit():d.hideturtle()d.speed(4)d.pensize(3)# 头部d.color('black')d.pu()d.goto(B_X, B_Y)d.pd()d.begin_fill()d.circle(RADIUS, 360)d.end_fill()# 耳朵d.pu()d.goto(RADIUS * sin(2 * ANGLE) + B_X, RADIUS * cos(2 * ANGLE) + RADIUS + B_Y)d.pd()d.seth(120)d.begin_fill()d.circle(-50, 60)d.circle(-10, 120)d.circle(-50, 55)d.pu()d.seth(0)d.forward(15)d.pd()d.seth(120)d.circle(-50, 55)d.circle(-10, 120)d.circle(-50, 62)d.end_fill()# 眼睛d.color('red')d.pu()d.seth(0)d.goto(RADIUS * sin(ANGLE) + B_X, RADIUS + B_Y)d.pd()d.begin_fill()d.circle(-5)d.pu()d.forward(2 * RADIUS * sin(ANGLE))d.pd()d.circle(5)d.end_fill()# 身体d.color('black')d.pu()d.seth(0)d.goto(RADIUS * sin(ANGLE) - 10 + B_X, 10 + B_Y)d.seth(-130)d.pd()d.begin_fill()d.circle(130, 30)  # 1d.circle(12, 140)  # 2d.circle(-160, 40)  # 3d.circle(-50, 75)  # 5d.circle(10, 140)  # 6d.circle(100, 45)  # 7# 尾巴d.seth(0)d.circle(10)# 背部d.seth(155)d.circle(160, 35)d.end_fill()# 前腿d.pu()d.goto(B_X, -42 + B_Y)d.pd()d.seth(-50)d.begin_fill()d.fd(25)d.circle(8, 110)d.fd(40)d.end_fill()# 后腿d.pu()d.goto(145 + B_X, -50 + B_Y)d.pd()d.seth(-85)d.begin_fill()d.fd(15)d.circle(-5, 150)d.fd(3)d.end_fill()

草地绘制函数

def ground():for i in range(100):y.pensize(randint(6, 12))x_zhou = randint(-SCREEN_LENGTH / 2, 0)y_zhou = randint(-SCREEN_WIDTH / 2, -SCREEN_WIDTH / 2 + 100)g = -y_zhou / 1000    # 颜色随y轴变幻y.pencolor(0, g, 0)y.pu()y.goto(x_zhou, y_zhou)y.pd()y.seth(0)y.left(randint(80, 100))y.forward(randint(10, 20))

雪地绘制函数

def snowfield():for i in range(150):d.pensize(randint(10, 18))x_zhou = randint(0, SCREEN_LENGTH / 2)y_zhou = randint(-SCREEN_WIDTH / 2, -SCREEN_WIDTH / 2 + 100)d.pencolor('white')d.pu()d.goto(x_zhou, y_zhou)d.pd()d.seth(0)d.forward(randint(20, 50))

爱心绘制函数

def heart_shaped(self):
# 画笔名叫lovelove.speed(2)love.pu()love.goto(-20, -100)love.seth(-90)love.pd()love.begin_fill()love.left(135)love.right(90)love.forward(50)love.left(90)love.forward(50)love.left(45)love.circle(17.67, 180)love.left(180)love.circle(17.67, 180)love.end_fill()

python库turtle的双画笔并发绘制兔兔 表白神器相关推荐

  1. 【计算机图形学】用python的turtle进行简单的图形绘制

    [计算机图形学]用python的turtle进行简单的图形绘制 python的turtle模块 绘制图形 绘制点 绘制直线 绘制椭圆 绘制六边形 绘制n次贝塞尔曲线 结语 python的turtle模 ...

  2. Python库turtle的趣味性用法,欢迎来品尝。

    天青色等烟雨,而我在等你. 不见云烟花落,只见风雨归尘. 文章目录 前言 一.python 绘图turtle绘图库? 二.使用步骤 1.turtle库的简单函数解释 2.一些简单代码展示及其介绍 总结 ...

  3. pythonturtle库使用心得_[python库]turtle库总结

    turtle库总结 1.画布: (1) turtle.screensize(宽,高,背景颜色) (2) turtle.setup(width=0.?,height=0.?,startx=?,start ...

  4. python 使用 turtle 画双心(丘比特之箭)

    import turtle import time   # 画心形圆弧 def hart_arc():     for i in range(200):         turtle.right(1) ...

  5. 【Python入门】Turtle海龟库:利用海龟画笔交互绘制一个万花筒

    利用海龟笔绘制一个螺旋线 功能要求 利用海龟笔绘制一个螺旋线 实例代码 import randomimport turtleturtle.bgcolor('pink')t = turtle.Pen() ...

  6. 【Python入门】Turtle海龟库:利用海龟画笔交互绘制笑脸或花朵

    绘制可爱的笑脸 功能要求 使用海龟绘图画可爱的笑脸 说明:笑脸主要由三个圆形和一个弧线组成.笑脸的脸为黄色的圆形,眼睛为两个黑色圆形,嘴为黑色的弧线. 实例代码 import turtlet = tu ...

  7. python库turtle的一些实例

    前言: 遇到了就整理了下,估计本人不大会用到,就用作分享吧,都能跑成功,但是部分实现没有深究,可能有不完善的地方,部分实例还是挺有趣的,比如一句话打印爱心,码如其名,我也是没想到真就一句print,我 ...

  8. python用turtle库写六角形

    python用turtle库写六角形独特代码(新手向) 思路 1.选定适宜规格画笔 2.选落脚及其初始偏转角度(可不偏转) 3.开始绘制两个三角形 (1)其中第一个三角形绘制完毕需重新选择落脚点(2) ...

  9. Python库 turtlede的使用(绘制小黄人、樱花树、小猪佩奇、皮卡丘)

    最近在学习Python库turtle的用法,顺便也整理了几个用turtle库画的图形,具体如下. 一  turtle的基本操作 1. 引用 turtle库 2. 常用的基础函数 (1)绘制状态的函数 ...

最新文章

  1. MoeCTF 2021Re部分------time2go
  2. 苏州银行签约神策数据,致力打造科技引领的新时代普惠银行
  3. 三大独家优势赢得关注 神策数据成功签约借贷宝
  4. 装载向导_麦德美爱法:异构集成时代的高阶封装载板金属化工艺
  5. 【简便解法】1089 狼人杀-简单版 (20分)_25行代码AC
  6. TypeScript学习(一):原始数据类型的定义
  7. MangoDB索引、排序和聚合
  8. [038]量化交易]显示所有股票名称及股票代码
  9. 5G网络优化工程师是做什么的?4大工作职责!
  10. 写给自己 NOI2012流水帐
  11. ICLR 2022 | 颠覆传统!大规模图像检索系统首次引入「热刷新」模型升级!腾讯清华大学新作...
  12. 如何深入理解php中的值传递和引用传递
  13. 程序包不存在 错误解决方法
  14. 打开u盘时出现“文件或目录损坏且无法读取”怎么办?
  15. 一年中有12个月,每个月的天数是不一样的,其中有7个月为31天称为大月,分别为1,3,5,7,8,10,12月, 有4个月为30天,称为小月,分别为4,6,9,11月,还有二月较特殊,平年的二月有28
  16. 拒绝年费自己组建MarkdownNice转微信公众号格式神器
  17. Ucenter通信失败(终极解决)
  18. nvchad添加插件
  19. Eclipse 4.2 SR1版悄悄发布
  20. 刺激战场怎么战斗服务器响应超时,绝地求生刺激战场网络延迟高怎么办 网络延迟解决方法...

热门文章

  1. discuz!论坛修复站帮网vip插件bug:VIP会员到期后,重新开通永久会员时,所属的用户组没有切换到永久会员分组
  2. 搭建Sendmail邮件系统
  3. uniapp获取手机导航栏高度
  4. python对平面设计帮助_Python图形设计
  5. Windows Phone 8.1低功耗蓝牙开发-Nokia Treasure Tag
  6. 偏财入财库大富_八字命理: 如何确认你的财库, 财星“身坐财库, 无人不富”
  7. linux sudo不能执行命令,为什么linux中sudo执行会“找不到命令”
  8. 视频怎么添加字幕?这几种添加字幕方法都很简单
  9. 批处理脚本中得到当前登录的用户名
  10. 【中土世界】精灵语常见词根及解释