练习项目,用turtle绘图库画个八卦。

关于八卦的具体细节,在画之前,除了知道这叫八卦外(曾一度叫它太极,没想到外面多了几行就不一样了),一无所知,画完后也不过多认识了个阴阳,所以,表述中基本都是口语字词,还有位置什么的是不是准确,也不知道,有熟悉之人可以在评论区科普下,不甚感激。


开始前先罗列下下手逻辑:内,太极部分;外,八卦部分。

作图中碰到的主要问题:

  1. 初始化画笔原点,以便于开始下一个命令清晰画笔位置和朝向;
  2. 初始作图起点,保证整体处于画布中间;
  3. 卦象的画法。

上面三个问题中,卦象的画法花费时间最近,最开始是用:使用for循环画三个同心逐级变小的八边形,再用辐射擦除的方法来完成的:

整体看起来,没什么问题,但是总觉得有些难看。


 更给目标:保持每一卦的线段长短一致,中间断点一致,在每一卦的外围加上卦名。


1.引入库

代码如下:turtle

from turtle import *

2.代码

代码如下:

# python 3.6
# pycharm
from turtle import *# 返回原点
def rset():pensize(1)pencolor('black')penup()home()pendown()# 设置画笔偏移,初始化八卦和太极的画笔起始点,保持整体居中
def offset(off_set, angle=0, mode='taiji'):# off_set太极时为大圆半径,八卦时要大于半径,否则会与太极重合。# angle默认为0,mode默认为‘taiji’,画太极的时候,不需要设置,默认即可;画卦的时候angle=angl,mode=‘bagua’。penup()home()  # 回到原点,朝向东if mode == 'taiji':  # 太极right(90)fd(off_set)seth(0)  # 朝向东else:  # 八卦left(angle)  # 每画一卦旋转45度的倍数,开始下一卦。fd(off_set)left(90)pendown()# 太极生成
def taiji(radius, pen_size=2, color='black'):rset()  # 初始化画笔pensize(pen_size)pencolor(color)offset(radius)  # 画笔偏移至起始点fillcolor('black')  # 填充颜色begin_fill()  # 开始填充circle(radius, 180)  # 画大圆的半圆circle(radius / 2, 180)  # 画s型circle(-radius / 2, 180)  # 画s型end_fill()  # 结束填充circle(-radius, 180)  # 画大圆的另一半圆# 上面小圆begin_fill()fillcolor('white')penup()home()  # 返回原点,默认朝东left(90)fd(radius * 0.7)  # 初始化小圆画笔起始点right(90)pendown()circle(-radius * 0.2)  # 画小圆end_fill()rset()# 下面小圆penup()begin_fill()fillcolor('black')right(90)fd(radius * 0.7)left(90)pendown()circle(radius * 0.2)end_fill()# 八卦生成
def bagua(off_set, side, gua_lis):pensize(side / 2)for j, k in enumerate(gua_lis):  # 枚举八卦列表,获取元素和下标,下标拿来判断旋转多少度angl = j * 45  # 偏移角度:0,45,90,135,180,225,270,315,360rset()  # 初始化到原点offset(off_set, angle=angl, mode='bagua')  # 偏移到八卦画笔,此时画笔位于线段中间点,下面3行代码初始到线段开头pencolor('white')pensize(5)bk(side / 2)for i in k:  # 遍历每一卦的集合,1为阳也就是完整线段,0为阴,带断点的线段pencolor('black')if i == 1:fd(side)elif i == 0:fd(side * (1 / 3))penup()fd(side * (1 / 3))pendown()fd(side * (1 / 3))elif isinstance(i, str) and j <= 4:  # 判断集合内内容,为字符串时,且为前5卦时,直接用write方法打印penup()fd(side / 2)pendown()write(i, align='center', font=('楷体', 15, "bold"))  # align有三个选项:’left‘,’center‘,’right‘,i后面两项可不填else:  # 后3卦,多偏移了一些距离,再用write方法打印,避免文字与卦重叠,影响效果penup()fd(side / 2)right(90)fd(15)pendown()write(i, align='center', font=('楷体', 15, "bold"))penup()  # 每画完一卦中的一条线后,回到中点,向外移动后,开始画下一段线段bk(side / 2)right(90)fd(side / 2)left(90)bk(side / 2)pendown()gua_lis = [(1, 1, 0, '兑'), (0, 0, 0, '坤'), (1, 0, 1, '离'), (0, 1, 1, '巽'), (1, 0, 0, '震'), (0, 0, 1, '艮'),(0, 1, 0, '坎'), (1, 1, 1, '乾')]
taiji(50)
bagua(70, 30, gua_lis)
hideturtle()
done()

Python 用turtle库画八卦相关推荐

  1. 用python的Turtle库画一个笑脸

    用python的Turtle库画一个笑脸 最近刚了解到python的turtle库,就简单的尝试一下,画一个笑脸. 效果图: 效果图看起来和原图的差别还是有点大,但是没关系,这只是一个尝试而已. 附上 ...

  2. 使用python的turtle库画表情包

    使用python的turtle库画表情包 话不多说,先上效果图,然后是代码 代码如下: import turtleturtle.penup() turtle.goto(-80,20) turtle.c ...

  3. python的turtle库画乔治

    分享一个用python的turtle库画乔治 链接:https://pan.baidu.com/s/1rIAZXGWIyk6zbDv5jlwv2g 提取码:rv6v 复制这段内容后打开百度网盘手机Ap ...

  4. 用Python的turtle库画一颗简单的树(双层递归的思想)

    用Python的turtle库画一颗简单的树(双层递归的思想) 这段时间比较闲,在CSDN上随便逛逛,看到有些用Python来绘图的程序,很有意思.于是作为Python小白的我,也自己动手尝试了一下, ...

  5. python的turtle库画一只小狐狸

    python的turtle库画一只小狐狸 from turtle import * setup(700,600,450,100)#标题输出 pensize(2) pencolor(0,0,0) pen ...

  6. 利用Python的turtle库画自行车

    利用Python的turtle库画自行车 前言 前言总得说点什么.疫情在家,慕课上学习北理工嵩天等老师的<python语言程序设计>[1],觉得turtle画图,挺有意思,既然骑不了自行车 ...

  7. 用python的turtle库画一个小猪佩奇

    小猪佩奇是一个可爱的小猪.她已经四岁了,与她的妈妈,爸爸,和弟弟乔治生活在一起.佩奇最喜欢做的事情是玩游戏,打扮的漂亮,度假,以及在小泥坑里快乐的跳上跳下和与小羊苏西(她最好的朋友)乔治(她的弟弟)一 ...

  8. 利用python的turtle库画一个图形

    今天我们用python的turtle库制作一个简单的图形(新手必看) [注:turtle是python的标准自带库,无需安装!] 好的废话不多说我们开始写代码 #制作人:中将 #一起自学python ...

  9. 用Python的turtle库画太极图

    作为一名中医药大学的学生,对太极图那是情有独钟,这不,我刚开始学Python不久,便想着用turtle库画一个太极图,对turtle库的使用还不熟练,代码量可能有点多-- 后来又尝试了让太极转动起来: ...

最新文章

  1. 【产品功能】价格信息支持下载
  2. Spring IO Platform简介及示例
  3. java cxf 双向通讯_CXF 在spring boot 2 发布多个服务
  4. 从工具到平台|默安科技研发安全一体化管理平台正式发布
  5. 几种开源NOSQL数据库
  6. python从入门到精通-python从入门到精通视频(大全60集)
  7. 区块链技术视频网站EthCast.com上线
  8. 魅族 android版本升级,魅族系统更新APP
  9. 保留字符串中的大写字母(汇编语言)
  10. 第八章 - 轮廓 - 查找轮廓、表示轮廓、绘制轮廓
  11. JAVA设计模式——享元模式
  12. camera一些常见名词缩写
  13. window10 win10 查看本机IP
  14. chmod命令用法(linux中chmod命令用法)
  15. EI | 北大温东辉组发现确定性过程驱动工业废水处理系统细菌群落构建
  16. python爬贴吧回复_Python爬虫——抓取贴吧帖子
  17. 谷歌云端硬盘 转存_如何在Mac上设置和使用Google云端硬盘
  18. 浅谈labviEW定时器
  19. Android实现跳转到应用市场进行版本更新功能
  20. SpringBoot + SpringSecurity 短信验证码登录功能实现

热门文章

  1. Linux下8723be网卡,Ubuntu 12.04 安装RTL8723BE无线网卡驱动
  2. POJ 1389 Area of Simple Polygons(扫描线求面积)
  3. 关于销售订单高级定价的一点疑惑
  4. 有什么真无线蓝牙耳机推荐?2022蓝牙耳机全球排行榜
  5. 再介绍一篇最新的Contrastive Self-supervised Learning综述论文
  6. java心形动画效果_java swing实现动态心形图案的代码下载
  7. 淘宝十年资深架构师吐血总结淘宝的数据库架构设计和采用的技术手段。
  8. 虚拟现实的起源、趋势及应用
  9. 重拾java之线程1
  10. jmap 几个慎用操作