基于Python绘制三种不同的中国结

目录
  • 前言
  • 示例一
    • 效果图
    • 代码展示
  • 示例二
    • 效果图
    • 代码展示
  • 示例三
    • 效果图
    • 代码展示

前言

今天就来分享几个用python绘制的图案吧

马上就要迎来新年了 就绘制了几个中国结,嘿嘿

话不多说,直接展示一下代码和效果图吧

示例一

效果图

代码展示

import turtle
turtle.screensize(600,800)
turtle.pensize(10)
turtle.pencolor("red")
turtle.seth(-45)
turtle.fd(102)
turtle.circle(-6,180)
turtle.fd(102)
turtle.circle(6,180)
turtle.fd(102)
turtle.circle(-6,180)
turtle.fd(102)
turtle.circle(6,180)
turtle.fd(102)
turtle.circle(-6,180)
turtle.fd(102)
turtle.circle(6,180)
turtle.fd(92)
turtle.circle(-6,270)
turtle.fd(92)
turtle.circle(6,180)
turtle.fd(102)
turtle.circle(-6,180)
turtle.fd(102)
turtle.circle(6,180)
turtle.fd(102)
turtle.circle(-6,180)
turtle.fd(102)
turtle.circle(6,180)
turtle.fd(102)
turtle.circle(-6,180)
turtle.fd(88)
turtle.fd(20)
turtle.seth(135)
turtle.fd(20)
turtle.seth(225)
turtle.fd(20)
turtle.seth(315)
turtle.fd(20)
turtle.seth(45)
turtle.fd(20)
turtle.seth(135)
turtle.begin_fill()
turtle.fillcolor("red")
turtle.fd(50)
turtle.seth(45)
turtle.fd(30)
turtle.seth(-45)
turtle.fd(30)
turtle.seth(225)
turtle.fd(30)
turtle.end_fill()
turtle.seth(90)
turtle.fd(40)
turtle.pensize(20)
turtle.fd(10)
turtle.pensize(5)
turtle.seth(105)
turtle.fd(30)
turtle.circle(-8,240)
turtle.circle(20,20)
turtle.fd(5)
turtle.circle(20,60)
turtle.fd(25)
turtle.penup()
turtle.setx(0)
turtle.sety(0)
turtle.goto(2,-127)
turtle.pendown()
turtle.pensize(5)
turtle.begin_fill()
turtle.fillcolor("red")
turtle.seth(0)
turtle.fd(15)
turtle.seth(-90)
turtle.fd(10)
turtle.seth(180)
turtle.fd(15)
turtle.seth(90)
turtle.fd(10)
turtle.seth(0)
turtle.fd(15)
turtle.end_fill()
turtle.pensize(2)
for x in range(6):
     turtle.seth(-90)
     turtle.fd(50)
     turtle.penup()
     turtle.seth(90)
     turtle.fd(50)
     turtle.seth(180)
     turtle.fd(3)
     turtle.pendown()
​​​​​​​
turtle.done()

示例二

效果图

如图所示 在代码里找到文字所在的地方,自己进行一下编辑,是可以加自己想加的话进去的

代码展示

import turtle as t
def goto(x,y):
    t.penup()
    t.goto(x,y)
    t.pendown()

def init():
    t.setup(800,800)
    t.pensize(10)
    t.pencolor("red")
    t.speed(14)

def jiexin():
    m,n=0,200
    for i in range(11):
        goto(m,n)
        t.seth(-45)
        t.fd(200)
        m-=20/pow(2,0.5)
        n-=20/pow(2,0.5)

    m,n=0,200
    for j in range(11):
        goto(m,n)
        t.seth(-135)
        t.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)
        t.seth(135)
        t.fd(20)
        t.circle(10,180)
        t.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)
        t.seth(45)
        t.fd(20)
        t.circle(-10,180)
        t.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)
        t.seth(-45)
        t.fd(20)
        t.circle(10,180)
        t.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)
        t.seth(-135)
        t.fd(20)
        t.circle(-10,180)
        t.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))
    t.seth(-45)
    t.circle(20,270)

    goto(-90*pow(2,0.5),200-110*pow(2,0.5))
    t.seth(-135)
    t.circle(-20,270)

    goto(80*pow(2,0.5),200-120*pow(2,0.5))
    t.seth(-45)
    t.circle(40,270)

    goto(-80*pow(2,0.5),200-120*pow(2,0.5))
    t.seth(-135)
    t.circle(-40,270)

def shengzi():
    goto(0,200)
    t.pensize(20)
    t.seth(90)
    t.fd(60)
    goto(0,320)
    t.pensize(12)
    t.seth(180)
    t.circle(30,360)

def hanzi():
    goto(-150,325)
    t.write("Python",font=("Arial",40,"normal"))

def main():
    init()
    jiexin()
    jiexiaoban()
    waiyuan()
    shengzi()
    hanzi()
    t.hideturtle()
    t.done()
main()

示例三

效果图

这个其实跟第二个差不多 就是没有上面那行字体

代码展示

import turtle as t
from math import sqrt

class chineseKnot:

    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

    def drawKnot(self) -> None:
        self.drawBody()
        self.drawEdge()
        self.drawAdorn()
        self.t.hideturtle()
        self.t.done()

    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)

    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绘制中国结内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Python如何利用turtle绘制中国结

    目录 导语 一.中国结 01  平安喜乐 1)效果图 2)附代码 二.中国结 02 心想事成 1)效果图 2)附代码 三.中国结 03 烟火年年 总结 导语 春节是中国特有的传统节日,中国结是中华民族特有的纯粹的文化精髓,富含丰富的文化底蕴,代表着我们对未来,对美好生活的向往和憧憬.新春佳节,小编祝福大家虎年吉祥!万事如意!祝我们的祖国引领世界,勇立潮头!国富民强! 渐渐的,渐渐的,新年很快就要到来.在快过新年时,人们有一个习俗,那就是买“中国结”. 据说,中国结可以让一家人平平安安.幸福,所以

  • 通过Python绘制中国结的示例代码

    目录 1 中国结的组成部分 2 设计中国结对象 3 绘制结体 4 绘制耳翼 5 绘制挂耳和流苏 6 完整代码,一键运行 1 中国结的组成部分 中国结是一种手工编织工艺品,它身上所显示的情致与智慧正是汉族古老文明中的一个侧面.因为其外观对称精致,可以代表汉族悠久的历史,符合中国传统装饰的习俗和审美观念,故命名为中国结.中国结代表着团结幸福平安,特别是在民间,它精致的做工深受大众的喜爱.其主要组成部分如下图所示. 2 设计中国结对象 基于Python Turtle库实现绘制,首先设计一个中国结对象,

  • 基于Python绘制三种不同的中国结

    目录 前言 示例一 效果图 代码展示 示例二 效果图 代码展示 示例三 效果图 代码展示 前言 今天就来分享几个用python绘制的图案吧 马上就要迎来新年了 就绘制了几个中国结,嘿嘿 话不多说,直接展示一下代码和效果图吧 示例一 效果图 代码展示 import turtle turtle.screensize(600,800) turtle.pensize(10) turtle.pencolor("red") turtle.seth(-45) turtle.fd(102) turtl

  • 使用Python绘制三种概率曲线详解

    目录 曲线一 解释 代码实现 曲线二 解释 代码实现 曲线三 代码实现 曲线一 解释 这里是使用matplotlib来绘制正态分布的曲线. 代码实现 import numpy as np import matplotlib.pyplot as plt def test1(n, m=500): out = [] result = np.random.normal(1, 5, n * m) print(result) for i in range(m): average0 = 0 for j in

  • 基于Python制作三款起床闹钟的示例代码

    目录 导语 一.Turtle绘制时钟 1)代码展示 2)效果展示 二.Turtle实现模拟时钟 1)代码展示 2)效果展示 三.简易时钟 1)代码展示 2)效果展示 导语 叮叮叮,我们要按时长大 我是你们的木子同学!当当当当——隆重出场,撒花撒花~ 嗨!大家有没有生物钟不准时的时候,是不是每到休息日或者长假就会经常要倒时差? 每天上班最痛苦的事情就是早起早起早起!这是大部分上班族的痛苦,但是不上班又是不可能的啦,因为都是为了搞钱 今天小编就用代码示例化,给大家展示一下不同的时钟,希望大家按时上班

  • 基于Python绘制520表白代码

    目录 一.绘制成品 二.绘制代码 1.导入库 2.选择背景音乐 3.绘制心的外轮廓 4.填充心并写告白信 5.画心动线 一.绘制成品 二.绘制代码 实现本文效果的整体思路是:加载库—选择背景音乐—绘制心的外轮廓—填充心并写告白信—绘制心动线. 1.导入库 # -*- coding: UTF-8 -*- ''' 代码用途 :情人节表白 作者 :阿黎逸阳 博客 : https://blog.csdn.net/qq_32532663/article/details/106176609 ''' impo

  • Python selenium 三种等待方式详解(必会)

    很多人在群里问,这个下拉框定位不到.那个弹出框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,就好比闪电侠和凹凸曼约好去打怪兽,然后闪电侠打完回来之后问凹凸曼你为啥还在穿鞋没出门?凹凸曼分分中内心一万只羊驼飞过,欺负哥速度慢,哥不跟你玩了,抛个异常撂挑子了. 那么怎么才能照顾到凹凸曼缓慢的加载速度呢?只有一个办法,那就是等喽.说到等,又有三种等法,且听博主一一道来: 1. 强制等待

  • 详解Python的三种可变参数

    可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 def testArg(*arg) 你可以传入任意多个元素(包括0)到参数中,在函数内部会自动认为是一个元组或列表 关键字参数 关键字参数在python中习惯用**kw表示,可以传入0到任意多个"关键字-值",参数在函数内部被当做一个字典结构.例如 def testArg(**kw) def testArg(city,**kw) 可以这样调用他 testArg(name='John',job='h

  • 详解python运行三种方式

    方式一 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗口如下: $ python Python 2.7.6 (default, Sep 9 2014, 15:04:36) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin Type "help", "copyright&

  • 详解Python用三种方式统计词频的方法

    三种方法: ①直接使用dict ②使用defaultdict ③使用Counter ps:`int()`函数默认返回0  ①dict text = "I'm a hand some boy!" frequency = {} for word in text.split(): if word not in frequency: frequency[word] = 1 else: frequency[word] += 1  ②defaultdict import collections f

  • Python tkinter三种布局实例详解

    这篇文章主要介绍了Python tkinter三种布局实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.pack布局举例 # pack布局案例 import tkinter baseFrame = tkinter.Tk() # 以下代码都是创建一个组件, 然后布局 btn1 = tkinter.Button(baseFrame, text = "A") btn1.pack(side = tkinter.LEFT, expan

  • 详解Python的三种拷贝方式

    在练习列表的操作的时候我发现赋值之后的列表会随着被赋值的列表改变而改变,就像是C语言中用指向同一实际变量的指针进行操作一样.这是因为Python中有三种拷贝方式:浅拷贝.深拷贝和赋值拷贝. 赋值拷贝就像是定义新指针并指向了同一内存区域,对任意一个列表名进行操作,其他的也会变化. 深拷贝的作用是完全拷贝一个列表A并赋值给另一列表B.以下是深度拷贝与列表操作的样例.记得在使用深拷贝的时候要引入copy包. import copy #对列表的增删改 numbers_Ori = ['one', 'two

随机推荐