怎样用Python画中国结,方法及代码是什么
Admin 2022-09-06 群英技术资讯 1060 次浏览
这篇文章给大家分享的是“怎样用Python画中国结,方法及代码是什么”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。中国结是一种手工编织工艺品,它身上所显示的情致与智慧正是汉族古老文明中的一个侧面。因为其外观对称精致,可以代表汉族悠久的历史,符合中国传统装饰的习俗和审美观念,故命名为中国结。中国结代表着团结幸福平安,特别是在民间,它精致的做工深受大众的喜爱。其主要组成部分如下图所示。

基于Python Turtle库实现绘制,首先设计一个中国结对象,画笔颜色就选择中国红。再定义一个__goto()函数封装turtle库对画笔移动的操作。
import turtle as t
class chineseKnot:
'''
* @breif: 中国结
'''
def __init__(self) -> None:
# 画笔初始化
self.t = t
self.t.pensize(10)
self.t.setup(700, 700)
self.t.pencolor("red")
self.t.speed(14)
# 结心坐标
self.x = 0
self.y = 200
'''
* @breif: 画笔移动到指定位置
* @param[in]: x -> 画笔移动位置横坐标
* @param[in]: y -> 画笔移动位置纵坐标
* @retval: None
'''
def __goto(self, x: int, y: int) -> None:
self.t.penup()
self.t.goto(x,y)
self.t.pendown()
def drawBody(self) -> None:
for i in range(11):
self.__goto(self.x - i * 10 * sqrt(2), self.y - i * 10 * sqrt(2))
self.t.seth(-45)
self.t.fd(200)
self.__goto(self.x + i * 10 * sqrt(2), self.y - i * 10 * sqrt(2))
self.t.seth(-135)
self.t.fd(200)
def drawEdge(self) -> None: for i in range(4): # 左上角 self.__goto(-10 * sqrt(2) - i * 20 * sqrt(2), 200 - 10 * sqrt(2) - i * 20 * sqrt(2)) self.t.seth(135) self.t.fd(20) self.t.circle(10, 180) self.t.fd(20) # 右上角 self.__goto(10 * sqrt(2) + i * 20 * sqrt(2), 200 - 10 * sqrt(2) - i * 20 * sqrt(2)) self.t.seth(45) self.t.fd(20) self.t.circle(-10, 180) self.t.fd(20) # 左下角 self.__goto(-10 * sqrt(2) - i * 20 * sqrt(2), 200 - 190 * sqrt(2) + i * 20 * sqrt(2)) self.t.seth(-135) self.t.fd(20) self.t.circle(-10, 180) self.t.fd(20) # 右下角 self.__goto(10 * sqrt(2) + i * 20 * sqrt(2), 200 - 190 * sqrt(2) + i * 20 * sqrt(2)) self.t.seth(-45) self.t.fd(20) self.t.circle(10, 180) self.t.fd(20) # 左侧 self.t.seth(-45) self.__goto(90 * sqrt(2), 200 - 110 * sqrt(2)) self.t.circle(20,270) self.__goto(-90 * sqrt(2), 200 - 110 * sqrt(2)) self.t.circle(-20,270) # 右侧 self.__goto(80 * sqrt(2), 200 - 120 * sqrt(2)) self.t.circle(40,270) self.__goto(-80 * sqrt(2), 200 - 120 * sqrt(2)) self.t.circle(-40,270)
def drawAdorn(self): # 上侧 self.__goto(self.x, self.y) self.t.pensize(14) self.t.seth(90) self.t.fd(60) self.__goto(0,320) self.t.seth(180) self.t.circle(30,360) # 下侧 self.__goto(0,200 - 200 * sqrt(2)) self.t.pensize(40) self.t.seth(-90) self.t.fd(20) self.t.pensize(2) for i in range(11): self.__goto(-20 + 4 * i, 200 - 200 * sqrt(2)) self.t.seth(-90) self.t.fd(200)
import turtle as t
from math import sqrt
class chineseKnot:
'''
* @breif: 中国结
'''
def __init__(self) -> None:
# 画笔初始化
self.t = t
self.t.pensize(10)
self.t.setup(700, 700)
self.t.pencolor("red")
self.t.speed(14)
# 结心坐标
self.x = 0
self.y = 200
'''
* @breif: 画中国结
* @param[in]: None
* @retval: None
'''
def drawKnot(self) -> None:
self.drawBody()
self.drawEdge()
self.drawAdorn()
self.t.hideturtle()
self.t.done()
'''
* @breif: 画中国结主体部分
* @param[in]: None
* @retval: None
'''
def drawBody(self) -> None:
for i in range(11):
self.__goto(self.x - i * 10 * sqrt(2), self.y - i * 10 * sqrt(2))
self.t.seth(-45)
self.t.fd(200)
self.__goto(self.x + i * 10 * sqrt(2), self.y - i * 10 * sqrt(2))
self.t.seth(-135)
self.t.fd(200)
'''
* @breif: 画中国结边缘部分
* @param[in]: None
* @retval: None
'''
def drawEdge(self) -> None:
for i in range(4):
# 左上角
self.__goto(-10 * sqrt(2) - i * 20 * sqrt(2),
200 - 10 * sqrt(2) - i * 20 * sqrt(2))
self.t.seth(135)
self.t.fd(20)
self.t.circle(10, 180)
self.t.fd(20)
# 右上角
self.__goto(10 * sqrt(2) + i * 20 * sqrt(2),
200 - 10 * sqrt(2) - i * 20 * sqrt(2))
self.t.seth(45)
self.t.fd(20)
self.t.circle(-10, 180)
self.t.fd(20)
# 左下角
self.__goto(-10 * sqrt(2) - i * 20 * sqrt(2),
200 - 190 * sqrt(2) + i * 20 * sqrt(2))
self.t.seth(-135)
self.t.fd(20)
self.t.circle(-10, 180)
self.t.fd(20)
# 右下角
self.__goto(10 * sqrt(2) + i * 20 * sqrt(2),
200 - 190 * sqrt(2) + i * 20 * sqrt(2))
self.t.seth(-45)
self.t.fd(20)
self.t.circle(10, 180)
self.t.fd(20)
# 左侧
self.t.seth(-45)
self.__goto(90 * sqrt(2), 200 - 110 * sqrt(2))
self.t.circle(20,270)
self.__goto(-90 * sqrt(2), 200 - 110 * sqrt(2))
self.t.circle(-20,270)
# 右侧
self.__goto(80 * sqrt(2), 200 - 120 * sqrt(2))
self.t.circle(40,270)
self.__goto(-80 * sqrt(2), 200 - 120 * sqrt(2))
self.t.circle(-40,270)
'''
* @breif: 画中国结装饰部分
* @param[in]: None
* @retval: None
'''
def drawAdorn(self):
# 上侧
self.__goto(self.x, self.y)
self.t.pensize(14)
self.t.seth(90)
self.t.fd(60)
self.__goto(0,320)
self.t.seth(180)
self.t.circle(30,360)
# 下侧
self.__goto(0,200 - 200 * sqrt(2))
self.t.pensize(40)
self.t.seth(-90)
self.t.fd(20)
self.t.pensize(2)
for i in range(11):
self.__goto(-20 + 4 * i, 200 - 200 * sqrt(2))
self.t.seth(-90)
self.t.fd(200)
'''
* @breif: 画笔移动到指定位置
* @param[in]: x -> 画笔移动位置横坐标
* @param[in]: y -> 画笔移动位置纵坐标
* @retval: None
'''
def __goto(self, x: int, y: int) -> None:
self.t.penup()
self.t.goto(x,y)
self.t.pendown()
if __name__ == '__main__':
knot = chineseKnot()
knot.drawKnot()
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本文实例为大家分享了Python实现渐变色水平堆叠图的具体代码,供大家参考,
os系统模块与shutil文件操作模块是Python常用的标准库,本文将通过示例详细讲解一下二者的使用,感兴趣的小伙伴可以跟随小编一起学习一下
1、数组a第0个元素(二维数组)下的所有子元素(一维数组)的第一列importnumpyasnpb=np arange(24)a=b reshape(2,3,4)printaprinta[0,:,0]
这篇文章给大家分享的是有关python的textwrap库怎么用的内容,通过textwrap库进行操作,我们能更便捷的对多文本进行处理,小编觉得挺实用的,因此分享给大家做个参考,接下来一起跟随小编看看吧。
Python中的continue语句将控制返回到当前循环的开头。当遇到continue语句时,循环将不执行当前迭代中剩余的语句,而直接下一次迭代开始。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008