用Python Turtle画一个中国结

 中国结,作为中华民族传统文化的象征之一,以其独特的编织技艺和深厚的文化内涵,深受人们喜爱。今天,我们就来用Python的turtle模块,尝试绘制一个充满韵味的中国结。

    我们先来看看整个中国结生成的过程:

中国节

首先,我们需要了解turtle模块。turtle是Python中一个非常有趣的绘图库,它使用一个小海龟在屏幕上爬行来绘制图形。通过控制海龟的速度、方向、颜色等属性,我们可以绘制出各种复杂的图案。

(1)首先,我们需要导入turtle模块,并设置窗口大小,颜色,画笔粗细,等参数

import turtle# 初始化海龟屏幕大小,颜色,速度等参数
turtle.setup(800, 800)
turtle.pensize(10)
turtle.pencolor("red")
turtle.speed(14)# 主函数
def main():turtle.penup()  # 提起画笔,移动不留痕迹turtle.pendown()  # 放下画笔,移动留下痕迹draw_knot()  # 自定义方法--调用绘制中国结的函数turtle.hideturtle()  # 隐藏海龟图标turtle.done()  # 结束绘制,等待用户关闭窗口# 绘制中国结的函数
def draw_knot():print('--这里是画中国结的主函数')if __name__ == "__main__":main()

 运行效果:可以看到,我们生成了一个800 x 800的正方形框,我们将在正方形框中画我们的中国结

2)我们开始画中国结


# 绘制中国结的总函数
def draw_knot():jiexin()  # 画中国结的结心(一共画22条斜线)jiexiaoban()  # 画中国结四个边上的边waiyuan()  # 画中国结两边的圆shengzi()  # 画中国结上面的绳子hanzi()  # 在中国结的最上方写下"我的中国梦"# 画中国结的结心(一共画22条斜线)
def jiexin():m, n = 0, 200# 从 0-11(不包含11)也就是11条线for i in range(11):goto(m, n)turtle.seth(-45)turtle.fd(200)m -= 20 / pow(2, 0.5)n -= 20 / pow(2, 0.5)# 反向正画11条线m, n = 0, 200for j in range(11):goto(m, n)turtle.seth(-135)turtle.fd(200)m += 20 / pow(2, 0.5)n -= 20 / pow(2, 0.5)# 画中国结四个边上的边
def jiexiaoban():m = -20 / pow(2, 0.5)n = 200 - 20 / pow(2, 0.5)for k in range(4):goto(m, n)turtle.seth(135)turtle.fd(20)turtle.circle(10, 180)turtle.fd(20)m -= 40 / pow(2, 0.5)n -= 40 / pow(2, 0.5)m = 20 / pow(2, 0.5)n = 200 - 20 / pow(2, 0.5)for k in range(4):goto(m, n)turtle.seth(45)turtle.fd(20)turtle.circle(-10, 180)turtle.fd(20)m += 40 / pow(2, 0.5)n -= 40 / pow(2, 0.5)m = 20 / pow(2, 0.5)n = 200 - 200 * pow(2, 0.5) + 20 / pow(2, 0.5)for k in range(4):goto(m, n)turtle.seth(-45)turtle.fd(20)turtle.circle(10, 180)turtle.fd(20)m += 40 / pow(2, 0.5)n += 40 / pow(2, 0.5)m = -20 / pow(2, 0.5)n = 200 - 200 * pow(2, 0.5) + 20 / pow(2, 0.5)for k in range(4):goto(m, n)turtle.seth(-135)turtle.fd(20)turtle.circle(-10, 180)turtle.fd(20)m -= 40 / pow(2, 0.5)n += 40 / pow(2, 0.5)# 画中国结两边的圆
def waiyuan():goto(90 * pow(2, 0.5), 200 - 110 * pow(2, 0.5))turtle.seth(-45)turtle.circle(20, 270)goto(-90 * pow(2, 0.5), 200 - 110 * pow(2, 0.5))turtle.seth(-135)turtle.circle(-20, 270)goto(80 * pow(2, 0.5), 200 - 120 * pow(2, 0.5))turtle.seth(-45)turtle.circle(40, 270)goto(-80 * pow(2, 0.5), 200 - 120 * pow(2, 0.5))turtle.seth(-135)turtle.circle(-40, 270)# 画中国结上面的绳子
def shengzi():goto(0, 200)turtle.pensize(20)turtle.seth(90)turtle.fd(60)goto(0, 320)turtle.pensize(12)turtle.seth(180)turtle.circle(30, 360)goto(0, 200 - 200 * pow(2, 0.5))turtle.pensize(40)turtle.seth(-90)turtle.fd(20)turtle.pensize(2)s = -20for i in range(11):goto(s, 200 - 200 * pow(2, 0.5))turtle.seth(-90)turtle.fd(200)s += 4# 在中国结的最上方写下"我的中国梦"
def hanzi():goto(-100, 325)turtle.write("我的中国梦", font=("Arial", 40, "normal"))

运行代码后,你将看到一个红色的中国结在屏幕上慢慢绘制出来。你可以调整turtle模块的各种参数,如速度、颜色、线条粗细等,来优化你的作品。来一起看看效果图吧   

整个项目的完整代码(如果第一行报错,说明没有安装turtle模块, 我们使用命令

pip install turtle 来安装模块即可)


import turtle# 初始化海龟屏幕大小,颜色,速度等参数
turtle.setup(800, 800)
turtle.pensize(10)
turtle.pencolor("red")
turtle.speed(14)# 主函数
def main():turtle.penup()  # 提起画笔,移动不留痕迹turtle.pendown()  # 放下画笔,移动留下痕迹draw_knot()  # 自定义方法--调用绘制中国结的函数turtle.hideturtle()  # 隐藏海龟图标turtle.done()  # 结束绘制,等待用户关闭窗口# 绘制中国结的函数
def draw_knot():jiexin()  # 画中国结的结心(一共画22条斜线)jiexiaoban()  # 画中国结四个边上的边waiyuan()  # 画中国结两边的圆shengzi()  # 画中国结上面的绳子hanzi()  # 在中国结的最上方写下"我的中国梦"# 将海龟移动到指定位置开始绘制
def goto(x, y):turtle.penup()turtle.goto(x, y)turtle.pendown()# 画中国结的结心(一共画22条斜线)
def jiexin():m, n = 0, 200# 从 0-11(不包含11)也就是11条线for i in range(11):goto(m, n)turtle.seth(-45)turtle.fd(200)m -= 20 / pow(2, 0.5)n -= 20 / pow(2, 0.5)# 反向正画11条线m, n = 0, 200for j in range(11):goto(m, n)turtle.seth(-135)turtle.fd(200)m += 20 / pow(2, 0.5)n -= 20 / pow(2, 0.5)# 画中国结四个边上的边
def jiexiaoban():m = -20 / pow(2, 0.5)n = 200 - 20 / pow(2, 0.5)for k in range(4):goto(m, n)turtle.seth(135)turtle.fd(20)turtle.circle(10, 180)turtle.fd(20)m -= 40 / pow(2, 0.5)n -= 40 / pow(2, 0.5)m = 20 / pow(2, 0.5)n = 200 - 20 / pow(2, 0.5)for k in range(4):goto(m, n)turtle.seth(45)turtle.fd(20)turtle.circle(-10, 180)turtle.fd(20)m += 40 / pow(2, 0.5)n -= 40 / pow(2, 0.5)m = 20 / pow(2, 0.5)n = 200 - 200 * pow(2, 0.5) + 20 / pow(2, 0.5)for k in range(4):goto(m, n)turtle.seth(-45)turtle.fd(20)turtle.circle(10, 180)turtle.fd(20)m += 40 / pow(2, 0.5)n += 40 / pow(2, 0.5)m = -20 / pow(2, 0.5)n = 200 - 200 * pow(2, 0.5) + 20 / pow(2, 0.5)for k in range(4):goto(m, n)turtle.seth(-135)turtle.fd(20)turtle.circle(-10, 180)turtle.fd(20)m -= 40 / pow(2, 0.5)n += 40 / pow(2, 0.5)# 画中国结两边的圆
def waiyuan():goto(90 * pow(2, 0.5), 200 - 110 * pow(2, 0.5))turtle.seth(-45)turtle.circle(20, 270)goto(-90 * pow(2, 0.5), 200 - 110 * pow(2, 0.5))turtle.seth(-135)turtle.circle(-20, 270)goto(80 * pow(2, 0.5), 200 - 120 * pow(2, 0.5))turtle.seth(-45)turtle.circle(40, 270)goto(-80 * pow(2, 0.5), 200 - 120 * pow(2, 0.5))turtle.seth(-135)turtle.circle(-40, 270)# 画中国结上面的绳子
def shengzi():goto(0, 200)turtle.pensize(20)turtle.seth(90)turtle.fd(60)goto(0, 320)turtle.pensize(12)turtle.seth(180)turtle.circle(30, 360)goto(0, 200 - 200 * pow(2, 0.5))turtle.pensize(40)turtle.seth(-90)turtle.fd(20)turtle.pensize(2)s = -20for i in range(11):goto(s, 200 - 200 * pow(2, 0.5))turtle.seth(-90)turtle.fd(200)s += 4# 在中国结的最上方写下"我的中国梦"
def hanzi():goto(-100, 325)turtle.write("我的中国梦", font=("Arial", 40, "normal"))if __name__ == "__main__":main()

 通过用Python的turtle模块绘制中国结,我们不仅可以锻炼编程能力,还可以更深入地了解中华民族传统文化的魅力。希望这篇文章能给你带来一些启发和乐趣!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/5247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年,如何实现高效的自动化渗透测试?

随着当前网络安全威胁的不断扩展与升级,开展渗透测试工作已经成为广大企业组织主动识别安全漏洞与潜在风险的关键过程。然而,传统的人工渗透测试模式对测试人员的专业能力和经验水平有很高的要求,企业需要投入较大的时间和资源才能完成。在此…

springboot3使用spring-boot-maven-plugin插件打包后找不到主类问题

打包后的jar很小只有几十K 修改plugin为以下内容 <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal&…

linux jmeter ant下载并安装【2024-亲测】

环境 centos7 一、下载jmeter 在这里插入代码片wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.tgz --no-check-certificate解压 tar -zxvf apache-jmeter-5.6.3.tgz复制到安装目录、设置环境变量 vim /etc/profile添加环境变量&#xff0c;路径改成…

监控操作台为生活提供安全保障

在科技日新月异的现代社会&#xff0c;监控操作台已成为我们生活中不能缺少的一部分。它犹如一座城市的守护神&#xff0c;默默无闻地守护着我们的安全&#xff0c;确保着每一刻的平安。今天&#xff0c;和北京嘉德立一同走进这个神秘的世界&#xff0c;揭开监控操作台的神秘面…

中国智造再升级,基点生物全球首发新一代高端自动化实验室冰箱

生物低温存储领域中国智造再次取得重要突破。近日&#xff0c;基点生物在第十六届中国整合生物样本学大会和2024国际生物及环境样本库协会年会&#xff08;ISBER 2024&#xff09;上&#xff0c;正式发布了最新一代高端实验室冰箱&#xff0c;这一创新设备的发布&#xff0c;标…

三种修改 Docker 镜像默认存储位置的方法

由于系统初始分区的原因&#xff0c;导致操作系统中对应 / 分区不会太大&#xff0c;通过 /var 目录不会单独分区。如果上面运行 Docker 服务&#xff0c;经过长时间的使用&#xff0c;会使原本就比较大的分区越来越不够用。如何更好地的处理这个问题呢&#xff1f; 1. 使用软…

ai口语软件有合适的吗?分享4款!

在全球化日益深入的今天&#xff0c;英语作为国际通用语言&#xff0c;其重要性不言而喻。然而&#xff0c;传统的英语学习方式往往枯燥无味&#xff0c;难以持续。幸运的是&#xff0c;随着人工智能技术的快速发展&#xff0c;AI英语口语软件应运而生&#xff0c;为语言学习者…

C#-FTP帮助类相关操作的简单封装

目录 1、Ftp帮助类的框架封装 2、初始化Ftp连接 3、检查Ftp连接 4、Ftp文件上传 5、Ftp文件下载 6、获取Ftp上文件/文件夹列表 7、删除Ftp文件 8、删除Ftp文件夹 9、创建Ftp文件夹 10、更改Ftp文件名 11、获取Ftp文件大小 1、Ftp帮助类的框架封装 public class FtpH…

中应该如何让c++工程认识.c工程编译出来的库文件?

from gpt 但是 测试此方法没问题 在 .h 文件中声明 C 函数的原型是让 C 工程认识 C 工程编译出来的库文件的关键。下面是一种常见的做法&#xff1a; 在 .h 文件中声明函数原型&#xff1a; 创建一个 .h 文件&#xff0c;其中包含要在 C 代码中调用的 C 函数的声明。这些声明…

IT外包:打通企业和IT技术人才之间的障碍

近年来&#xff0c;随着互联网信息的快速发展&#xff0c;各种企业之间的信息竞争越来越激烈&#xff0c;越来越多的企业对IT人才的需求逐渐增加。很多企业经常感叹每年都在招人&#xff0c;然而每年都不靠谱。一方面要谨慎&#xff0c;担心请神容易送神难。另一方面&#xff0…

红魔8/8Pro/8SPro手机升级安卓14版RedMagic9.0系统+降级出厂救砖刷机

红魔8系列手机也终于引来了安卓14系统的更新&#xff0c;该系统为最新的RedMagic9.0&#xff0c;目前属于公测版本&#xff0c;如果你已经升级了官方UI8.0最新版系统&#xff0c;并且拥有公测资格&#xff0c;可以直接在线检测到最新版UI9.0系统。9.0系统目前对比之前的8.0的版…

西门子:HMI小游戏-灰太狼与喜羊羊

DB块&#xff1a; HMI界面&#xff1a; 实际视频&#xff1a; 抓羊小游戏

day26 java Stream

①Stream 自己不会存储元素。 ②Stream 不会改变源对象。每次处理都会返回一个持有结果的新Stream。 ③Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。说明&#xff1a;可以把Stream想象成一条流&#xff08;流水线&#xff09;在流的上面有很多操作&…

Camera设备上晶体晶振的应用

IPC行业现状的分析 IP Camera起源于20世纪90年代&#xff0c;最早应用于监控系统中。 随着AI技术、云服务以及IoT技术的发展&#xff0c;IPC已经从安防监控向智慧城市、智能家居、自动驾驶、智能医疗等行业领域拓展&#xff0c;不单单传统地应用于工业&#xff0c;个人和家庭的…

Django-admin组件

Django-admin组件 admin是django中提供的一套可视化工具&#xff1a;用于对ORM中定义的表进行增删改查。 1 概览 在django项目启动时&#xff0c;自动找到注册到admin中的所有model中定义的类&#xff0c;然后为这些类生成一系列的URL和视图函数&#xff0c;实现基本增删改查…

提高办公效率,实现团队协作——了解ONLYOFFICE

目录 引言现代办公环境中的挑战ONLYOFFICE 一、ONLYOFFICE介绍1.ONLYOFFICE介绍2.基础功能介绍&#xff08;包括协作空间&#xff09;a.全面的办公功能可多人协作的在线文档编辑软件&#xff08;Word&#xff09;强大的在线电子表格编辑软件&#xff08;Excel&#xff09;创造精…

自动化测试web库(元素定位、元素操作、浏览器操作)

按照谷歌浏览器 Chrome &#xff1a;https://googlechromelabs.github.io/chrome-for-testing/ Chrome使用技巧&#xff1a; 1、找到自己想要的标签 打开检查&#xff0c;点击箭头&#xff0c;再点击你想要点击的地方 2、直接在浏览器上查询&#xff0c;看看是否查询成功 可…

SpringBoot+阿里云实现验证码登录注册及重置密码

开通阿里云短信服务 阿里云官网 创建API的Key 可以使用手机号或者刷脸来进行创建Key 创建成功 开通完成以后接下来实现代码请求阶段 配置maven依赖 <!-- 阿里云 oss 短信 依赖--><dependency><groupId>com.aliyun</groupId><artifactId>dysm…

三、VUE数据代理

一、初识VUE 二、再识VUE-MVVM 三、VUE数据代理 Object.defineProperty() Object.defineProperty() 静态方法会直接在一个对象上定义一个新属性&#xff0c;或修改其现有属性&#xff0c;并返回此对象。 Object.defineProperty() 数据代理 通过一个对象代理另一个对象中属…

【imazing骗局】imazing软件安全吗 需要越狱吗 为什么iPhone都会装iMazing来管理

鉴于苹果设备的封闭性与安全性&#xff0c;我们大部分情况下都需要搭配iTunes进行设备的管理。但作为一款全方位的iOS设备管理软件&#xff0c;iMazing竟然可以突破iTunes的限制&#xff0c;与设备直接连接&#xff0c;进行备份、管理等操作。 因此&#xff0c;很多人都会有疑…