中国结编程代码,

  中国结编程代码,

  马上就要过年了,本文就给大家展示一下如何用Python代码画一个中国结。文中的样例代码讲解的很详细,有兴趣的可以试试。

  00-1010 1中国结的组成部分2设计中国结对象3绘制结体4绘制耳朵翅膀5绘制吊耳和流苏6完整代码,一键操作

  

目录

  中国结是一种手工编织的工艺品,在它上面展示的情感和智慧,只是汉民族古老文明的一个侧面。因其外形对称精致,能代表汉民族悠久的历史,符合中国传统装饰的习俗和审美观念,故名中国结。中国结代表团结、幸福与和平,尤其是在人民中间。其精致的做工深受大众喜爱。其主要组件如下图所示。

  

1 中国结的组成部分

  基于Python龟库绘图,先设计一个中国结对象,选择中国红作为画笔颜色。然后定义一个__goto()函数来封装turtle库对画笔移动的操作。

  进口甲鱼作为t

  中文Knot:类

  * @breif:中国结

  def __init__(self) - None:

  #笔刷初始化

  self.t=t

  自我反省(10)

  自我测试设置(700,700)

  自我色彩(红色)

  自我测试速度(14)

  #节点坐标

  self.x=0

  self.y=200

  * @breif:画笔移动到指定位置

  * @ param[in]3360 x-画笔移动位置横坐标

  * @ param[in]3360画笔移动位置的纵坐标

  * @retval:无

  def __goto(self,x: int,y: int) - None:

  self.t.penup()

  self.t.goto(x,y)

  self.t.pendown()

  

2 设计中国结对象

  def drawBody(自身)- None:

  对于范围(11):中的I

  自我。__goto(self.x - i * 10 * sqrt(2),self.y - i * 10 * sqrt(2))

  self.t.seth(-45)

  自我测试(200)

  自我。__goto(self.x i * 10 * sqrt(2),self.y - i * 10 * sqrt(2))

  self.t.seth(-135)

  自我测试(200)

  

3 绘制结体

  def drawEdge(自身)- None:

  对于范围(4):中的I

  #左上角

  自我。__goto(-10 * sqrt(2) - i * 20 * sqrt(2),

  200 - 10 * sqrt(2) - i * 20 * sqrt(2))

  自我. t .塞斯(下)135

  自我测试(20)

  self.t.circle(10,180)

  自我测试(20)

  #右上角

  自我。__goto(10 * sqrt(2) i * 20 * sqrt(2),

  200 - 10 * sqrt(2) - i * 20 * sqrt(2))

  self.t.seth(45)

  自我测试(20)

  自圆(-10,180)

  自我测试(20)

  #左下角

  自我。__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)

  

  

5 绘制挂耳和流苏

  

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)

  

  

6 完整代码,一键运行

  

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()

  到此这篇关于通过Python绘制中国结的示例代码的文章就介绍到这了,更多相关Python绘制中国结内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: