属于“数模人”的新年仪式感,让我们用Python一起来画四种版本的可爱小蛇吧!

教育   2025-01-01 16:38   天津  



这是一条数模小蛇,它会祝你在数模比赛中,算法永不打结,思路不会杂乱,论文行云流水,难题迎刃而解!让我们说谢谢小蛇!



以下均采用python绘制,代码部分已经做好了注释,大家可以自行复制运行吼。

我们先来绘制文章开头的最简单的小蛇:

import turtleturtle.setup(650,350,200,200)#窗体宽高和xy坐标turtle.penup()#抬起画笔turtle.fd(-250)#往前,走直线,默认在窗体正中间turtle.pendown()#画笔降落,继续绘制小蛇turtle.pensize(30)#笔的粗细,可以按照小蛇的“腰围”自定义哦turtle.pencolor("green")#小蛇的颜色,今年是木蛇年,可以用绿色来画turtle.seth(-40)#小蛇的方向,绝对坐标系中(以屏幕正右方为0度,逆时针为正度数)的-40度方向for i in range(4):    #以左侧距离为r(如果r是负数,则以右侧距离-r)的点为圆心蛇皮走位(半径,旋转角度)    turtle.circle(40,80)    turtle.circle(-40,80)turtle.circle(40,80/2)turtle.fd(40)turtle.circle(16,180)turtle.fd(40*2/3)#程序运行之后,不会退出turtle.done()

接下来我们可以进阶一下,绘制一条彩色的小蛇:

import turtleturtle.setup(650, 350, 200, 200)#设置turtle窗口的大小为650x350像素,初始位置在屏幕的(200, 200)位置。turtle.penup()#抬起画笔,移动时不绘制线条。turtle.fd(-250)#向前移动250像素,由于之前已经抬起画笔,所以这一步不会绘制任何线条。turtle.pendown()#放下画笔,准备开始绘制。turtle.pensize(30)#设置小蛇的粗细为30像素。colors = ["red", "blue", "green", "yellow", "purple"]#定义一个颜色列表,用于绘制图案。turtle.pencolor(colors[0])#设置画笔颜色为颜色列表中的第一个颜色,即红色。turtle.seth(-40)#设置画笔的朝向为-40度。turtle.shape("circle")  # 将turtle的形状更改为圆形。turtle.shapesize(0.5)#调整turtle形状的大小为原始大小的0.5倍。for i in range(4):#开始一个循环,循环4次。    turtle.circle(40, 80)#绘制一个半径为40像素,角度为80度的圆弧。    turtle.pencolor(colors[i % len(colors)])#在每次循环中改变画笔颜色为颜色列表中的下一个颜色。    turtle.circle(-40, 80)#绘制一个半径为40像素,角度为80度的圆弧,方向与上一个圆弧相反。    turtle.pencolor(colors[(i + 1) % len(colors)])  # Change color after each loopturtle.circle(40, 80 / 2)#绘制一个半径为40像素,角度为40度的圆弧。turtle.fd(40)#向前移动40像素。turtle.pencolor(colors[-1])  # 将画笔颜色设置为颜色列表中的最后一个颜色,即紫色。turtle.circle(16, 180)#绘制一个半径为16像素,角度为180度的圆弧。turtle.fd(40 * 2 / 3)#向前移动(40 * 2 / 3)像素,即大约26.67像素。turtle.done()#完成绘制,保持窗口打开直到用户关闭它。

好,看来大家都学会啦,那我们就继续上个难度,来绘制一幅简笔画可爱小蛇

import turtle as t  # 导入turtle模块,并给它起一个别名tt.title('蛇')  # 设置绘图窗口的标题为“蛇”t.pencolor("green")  # 设置画笔的颜色为绿色,这将是蛇的主体颜色t.pensize(10)  # 设置画笔的粗细为10像素t.penup()  # 抬起画笔,移动到指定位置时不会绘制线条t.goto(-200, 150)  # 将画笔移动到坐标(-200, 150)的位置t.pendown()  # 放下画笔,准备开始绘制# 绘制蛇的头部和身体部分t.circle(-30, -180)  # 绘制一个半径为30像素,角度为180度的圆弧,注意负角度表示逆时针方向t.setheading(165)  # 设置画笔的朝向为165度t.circle(-60, -50)  # 绘制一个半径为60像素,角度为50度的圆弧t.penup()  # 抬起画笔,准备移动到下一个绘制起点t.goto(-180, 90)  # 将画笔移动到坐标(-180, 90)的位置t.pendown()  # 放下画笔,继续绘制t.setheading(120)  # 设置画笔的朝向为120度t.circle(100, -50)  # 绘制一个半径为100像素,角度为50度的圆弧t.circle(-60, -50)  # 绘制一个半径为60像素,角度为50度的圆弧t.circle(-80, -50)  # 绘制一个半径为80像素,角度为50度的圆弧t.circle(-60, -50)  # 再次绘制一个半径为60像素,角度为50度的圆弧t.circle(130, -30)  # 绘制一个半径为130像素,角度为30度的圆弧t.circle(70, -30)  # 绘制一个半径为70像素,角度为30度的圆弧t.circle(30, -100)  # 绘制一个半径为30像素,角度为100度的圆弧t.circle(-30, -120)  # 绘制一个半径为30像素,角度为120度的圆弧t.setheading(-50)  # 设置画笔的朝向为-50度t.circle(30, -120)  # 绘制一个半径为30像素,角度为120度的圆弧t.setheading(-120)  # 设置画笔的朝向为-120度t.circle(-50, -100)  # 绘制一个半径为50像素,角度为100度的圆弧t.setheading(-30)  # 设置画笔的朝向为-30度t.circle(-105, -70)  # 绘制一个半径为105像素,角度为70度的圆弧t.circle(50, -140)  # 绘制一个半径为50像素,角度为140度的圆弧t.penup()  # 抬起画笔,准备移动到下一个绘制起点t.goto(-200, 150)  # 将画笔移动到坐标(-200, 150)的位置t.pendown()  # 放下画笔,继续绘制t.setheading(195)  # 设置画笔的朝向为195度t.circle(70, -132)  # 绘制一个半径为70像素,角度为132度的圆弧t.circle(90, -20)  # 绘制一个半径为90像素,角度为20度的圆弧# 绘制蛇的舌头t.pencolor("red")  # 设置画笔的颜色为红色,用于绘制蛇的舌头t.pensize(3)  # 设置画笔的粗细为3像素t.penup()  # 抬起画笔,准备移动到舌头的绘制起点t.goto(-230, 100)  # 将画笔移动到坐标(-230, 100)的位置t.pendown()  # 放下画笔,开始绘制舌头t.circle(30, -60)  # 绘制一个半径为30像素,角度为60度的圆弧,形成舌头的形状# 绘制蛇的眼睛t.pencolor("black")  # 设置画笔的颜色为黑色,用于绘制蛇的眼睛t.pensize(3)  # 保持画笔的粗细为3像素t.shape('circle')  # 设置turtle的形状为圆形,这样绘制时会显示为一个圆点t.penup()  # 抬起画笔,准备移动到眼睛的绘制起点t.goto(-190, 120)  # 将画笔移动到坐标(-190, 120)的位置t.pendown()  # 放下画笔,开始绘制眼睛t.done()  # 完成绘制,保持窗口打开直到用户关闭它

除了绘制特定的图案,也可以根据上传的图片绘制任何你想要的小萌蛇

这个代码与上文略有不同,先利用opencv进行边缘检测,将检测出来的边缘信息作为turtle的输入进行绘制。因此,你可以将其替换成任何你想画的图,但是需要注意路径中不要有中文字符哦~

import cv2  # 导入OpenCV库,用于图像处理import turtle  # 导入turtle库,用于绘图# 加载图像并进行边缘检测image_path = 'F:/data_process/img/4.jpg'  # 图像文件的路径# 尝试读取图像image = cv2.imread(image_path)  # 使用OpenCV的imread函数读取图像# 将图像转换为灰度图,因为边缘检测通常在灰度图上进行gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用Canny算法进行边缘检测edges = cv2.Canny(gray, 50, 150)  # Canny边缘检测,50和150是阈值参数# 创建Turtle画布screen = turtle.Screen()  # 创建一个Screen对象screen.setup(image.shape[1], image.shape[0])  # 设置画布大小为图像的宽度和高度screen.setworldcoordinates(0, 0, image.shape[1], image.shape[0])  # 设置画布的坐标系统与图像坐标对应# 注释掉的代码,用于关闭turtle的自动更新,可以查看画图过程,但在此代码中未启用turtle.tracer(False)# 创建Turtle画笔pen = turtle.Turtle()  # 创建一个Turtle对象pen.speed(10)  # 设置画笔的速度,10是最快pen.hideturtle()  # 隐藏画笔的turtle形状# 绘制边缘for y in range(edges.shape[0]):  # 遍历图像的每一行    for x in range(edges.shape[1]):  # 遍历图像的每一列        if edges[y, x] > 0:  # 如果在边缘检测结果中,该像素是边缘的一部分            pen.penup()  # 抬起画笔,移动到新位置时不绘制            pen.goto(x, edges.shape[0] - y)  # 移动到新位置,注意y坐标需要翻转以匹配图像坐标            pen.pendown()  # 放下画笔,开始绘制            pen.forward(1)  # 向前绘制一个像素# 关闭窗口turtle.done()  # 完成绘制,保持窗口打开直到用户关闭它

新的一年,元旦福利当然少不了!

为帮助同学们提升美赛中编程能力!

特推出Python能力提升课

扫描下方二维码即可报名



课程目录

同时我们致力于为国内学生报名国际赛事

为同学们省去大部分繁琐流程的同时

附赠赛题讲解

现针对美赛特推出美赛辅助报名

↓↓

赛氪连续13年为美赛辅助报名提供服务,截至目前已成功为23万余名学生完成了美赛辅助报名!成为目前全球最大、最靠谱、参赛院校最广的辅助报名平台。赛氪美赛辅助报名不仅仅只是单纯的报名服务,后续赛前指导、赛中操作流程及注意事项指引等竞赛故障问题,全程免费为参赛者服务




时间安排


1.辅助报名截止时间北京时间2025年1月23日23:00

2.比赛时间:北京时间2025年1月24日早晨6:00点(星期五) 至 2025年1月28日上午9:00(星期二)

3.提交截止日期:北京时间2025年1月28日上午10:00(星期二)

4.比赛结果:结果将于2025年5月31日或之前发布。



辅助报名方式


扫描下方二维码报名

https://www.saikr.com/vse/comap/2025?ces=gzh



辅助报名费用


注:

1、可以提供开发票服务及服务说明用于报销,有需要的同学可填写发票申请链接,申请后将在1-2周后发到申请邮箱中。

2、美赛官网报名成功凭证电子receipt可免费下载。

3、只报名不要证书的同学走下面集体报名的方式:填表、缴费、截图 发邮箱,等回复邮件后登录美赛官网核对信息。

4、凡通过赛氪进行辅助报名的队伍,在比赛报名截止前2天如有其他问题无法参赛,可协助队伍办理退赛



报名福利


凡是报名参加“美赛辅助报名以及证书打印邮寄活动”的同学,均可享受以下服务:

1. 数学建模资料大礼包(最新的论文模板Word、Latex模板,保姆式的提交参赛作品说明文档,历年美赛特等奖论文集,历年竞赛赛题及中文翻译,数模电子书、常用数据库等资料,Matlab、SPSS、Latex等软件包,包含了参赛必备的所有资料,节省大量备赛时间);

2. 免费获得价值500元的美赛专属课程一门,3人同享(共30学时,包含:数学建模入门、数学实验、初等数学模型、优化数学模型、排队论模型、数学处理模型、智能优化算法、赛题解析、学术论文的写作与投稿九大方面的内容)。(报名成功后点击下方图片链接,直接进入学习)

3.OF奖可以免费指导发表EI会议论文(会议费版面费需自付,可升级优惠指导发表SCI论文);其他奖项可优惠指导发表EI会议论文

4. 免费获得2020-2023年美国大学生数学建模竞赛真题的视频讲解。(报名成功后也在上方基础课程中进行学习,自动开通课程)

5. 2025年美赛,特邀请美赛数模教学名师、历年O奖得主进行“2025美赛备考经验分享”系列公开直播课



联系方式


辅助报名负责人QQ:1870544744

负责人微信号:13110023072(张老师)

美赛辅助报名接待群:996319224


点击“阅读原文”,进入辅助报名官网



BONUS TIME


文末福利

更多

↓↓

数学建模资料、视频讲解、历年赛题

后台回复 校苑领取


#
推荐阅读(点击下方图片即可跳转)

校苑数模
Hi,这里是校苑数模,专注于数学及应用数学教育。旗下培训、竞赛、社区、人才对接形成了数学教育的闭环。依托中国优选法统筹法与经济数学研究会等优势资源,在领域内深耕10年。
 最新文章