Python绘制太极八卦

八卦图

文章目录

  • 系列目录
  • 写在前面
  • 技术需求
    • 1. 图形绘制库的支持
    • 2. 图形绘制功能
    • 3. 参数化设计
    • 4. 绘制控制
    • 5. 数据处理
    • 6. 用户界面
  • 完整代码
  • 代码分析
    • 1. `rset()` 函数
    • 2. `offset()` 函数
    • 3. `taiji()` 函数
    • 4. `bagua()` 函数
    • 5. 绘制过程
    • 6. 技术亮点
  • 写在后面

系列目录

序号直达链接
爱心系列
1Python制作一个无法拒绝的表白界面
2Python满屏飘字表白代码
3Python无限弹窗满屏表白代码
4Python李峋同款可写字版跳动的爱心
5Python流星雨代码
6Python漂浮爱心代码
7Python爱心光波代码
8Python普通的玫瑰花代码
9Python炫酷的玫瑰花代码
10Python多彩的玫瑰花代码
节日系列
1Python动漫风烟花秀代码
2Python新年烟花秀代码
3Python圣诞礼物代码
4Python画圣诞树代码
5Python可爱版圣诞树丨绿色
6Python可爱版圣诞树丨粉色
7Python大雪纷飞代码
8Python生日蛋糕代码
9Python五彩气球代码
10Python国庆祝福代码
11Python万圣礼物代码
12Python愚人节礼物代码
13Python浪漫星空代码
14Python樱花树代码
动漫系列
1Python名侦探柯南
2Python喜羊羊
3Python懒羊羊
4Python沸羊羊
5Python小灰灰
6Python小香香
7Python灰太狼
8Python海绵宝宝
9Python哆啦A梦
10Python凯蒂猫
11Python猫和老鼠
12Python草莓熊
13Python迷你皮卡丘
14Python高级皮卡丘
15Python豪华皮卡丘
16Python史迪仔
17Python小熊猫
18Python蜘蛛侠
19Python可爱版蜡笔小新
20Python萌萌的蜡笔小新
21Python罗小黑
22Python猪猪侠
炫酷系列
1  Python张万森下雪了
2Python一闪一闪亮晶晶
3Python黑客帝国代码雨
4Python七彩花朵
5Python模拟3D星空
6Python金榜题名
7Python满天星

写在前面

Python绘制一张太极八卦图的完整代码。

技术需求

1. 图形绘制库的支持

  • Turtle图形库:使用Python的turtle库来实现图形的绘制。该库提供了基本的绘图功能,如移动画笔、改变方向、绘制直线和曲线、填充颜色等。

2. 图形绘制功能

  • 太极图绘制

    • 初始化:复位画笔位置和状态。
    • 偏移定位:将画笔移动到太极图的起始位置。
    • 绘制轮廓:绘制太极图的大圆和S形曲线。
    • 填充颜色:分别填充黑白两色区域。
    • 绘制阴阳眼:在太极图中心绘制两个小圆,代表阴阳鱼的眼睛。
  • 八卦图绘制

    • 初始化:复位画笔位置和状态。
    • 偏移定位:根据八卦图的排列方式,将画笔移动到每个卦象的起始位置。
    • 绘制卦象:根据给定的卦象数据(阳爻和阴爻),绘制相应的线条。
    • 添加文字:在适当的卦象位置添加卦名。

3. 参数化设计

  • 太极图参数

    • 半径:太极图大圆的半径。
    • 线条粗细:太极图线条的粗细。
    • 颜色:太极图的颜色。
  • 八卦图参数

    • 偏移量:八卦图相对于中心点的偏移量。
    • 线段长度:每个卦象的线段长度。
    • 卦象数据:包含八卦图中每个卦象的符号信息(阳爻、阴爻和卦名)。

4. 绘制控制

  • 窗口设置:设置绘图窗口的标题和大小。
  • 动画控制:关闭动画追踪,提高绘制速度。
  • 隐藏画笔:绘制完成后隐藏画笔光标,展示最终的图形。

5. 数据处理

  • 卦象数据:定义一个列表gua_lis,包含每个卦象的符号信息(阳爻、阴爻和卦名)。
  • 遍历和条件判断:根据卦象数据中的信息,动态绘制相应的图形和文字。

6. 用户界面

  • 窗口管理:创建一个绘图窗口,并设置窗口的标题和大小。
  • 显示结果:绘制完成后,保持窗口打开,展示最终的太极八卦图。

完整代码

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, '乾')]
title('太极八卦图')
setup(0.5, 0.5)
tracer(0)
taiji(50)
bagua(70, 30, gua_lis)
hideturtle()
done()

代码分析

这段代码使用Python的turtle图形库来绘制太极八卦图。在深入分析之前,我们需要理解turtle库的基本概念:它是一个用于绘制二维图形的简单工具,通过控制一个虚拟的“海龟”在屏幕上移动来完成绘图任务。海龟的位置、方向和状态(如是否落笔)可以通过编程指令进行控制。

1. rset() 函数

这个函数用于将画笔(即“海龟”)复位到屏幕中央,并设置一些默认属性,比如线条粗细和颜色。这是为了确保每次绘制新的元素时都能从一个标准的位置和状态开始,保证绘图的一致性和准确性。

2. offset() 函数

此函数的作用是将画笔移动到绘制太极图或八卦图所需的起始位置。它接受三个参数:偏移量(off_set)、偏移角度(angle,默认值为0)和模式(mode,默认值为’taiji’)。对于太极图来说,它将画笔垂直向下移动指定的距离;而对于八卦图,它则根据传入的角度值旋转画笔方向,并沿该方向移动指定距离,以便于后续绘制八卦中的每个卦象。

3. taiji() 函数

该函数负责绘制太极图。它首先调用rset()函数复位画笔,然后设定线条宽度和颜色,接着调用offset()函数定位到太极图的起始点。之后,使用turtle的绘图命令(如circlebegin_fillend_fill等)绘制出太极图的轮廓和黑白两色部分。值得注意的是,太极图中心的小圆(阴阳鱼的眼睛)也在此函数中绘制完成。

4. bagua() 函数

这个函数用来绘制八卦图。它接收三个参数:偏移量(off_set)、线段长度(side)以及包含各卦符号信息的列表(gua_lis)。函数内部遍历gua_lis列表,根据每个卦象的数据(由1和0组成的元组,代表阳爻和阴爻)绘制相应的图形。此外,如果元组中包含字符串(卦名),则会在适当的位置使用write函数输出这些文字。为了使卦象之间排列整齐,函数还会根据需要调整画笔的位置和方向。

5. 绘制过程

  • 初始化:设置窗口标题、大小,关闭动画追踪(通过tracer(0)提高绘制速度)。
  • 太极图绘制:调用taiji(50)绘制太极图,其中50是太极图的大圆半径。
  • 八卦图绘制:调用bagua(70, 30, gua_lis)绘制八卦图,其中70是偏移量,30是线段长度,gua_lis是包含八卦信息的列表。
  • 结束:隐藏海龟光标,显示绘制好的图像(通过done()函数)。

6. 技术亮点

  • 模块化设计:通过定义多个功能明确的函数,使得整个程序结构清晰,易于维护和扩展。
  • 灵活的参数设置:各个函数允许传入不同的参数值,从而可以轻松调整太极图和八卦图的具体外观。
  • 精确的位置控制:利用turtle提供的精确位置控制能力,确保了太极图和八卦图能够准确无误地被绘制出来。

综上所述,这段代码不仅实现了太极八卦图的绘制,而且展示了如何通过合理的设计和组织代码来解决复杂的图形绘制任务。

写在后面

我是一只有趣的兔子,感谢你的喜欢。

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

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

相关文章

uniapp vue2项目迁移vue3项目

uniapp vue2项目迁移vue3项目&#xff0c;必须适配的部分 一、main.js 创建应用实例 // 之前 - Vue 2 import Vue from vue import App from ./App Vue.config.productionTip false // vue3 不再需要 App.mpType app // vue3 不再需要 const app new Vue({ ...App }) …

卷积神经网络学习记录

目录 神经网络基础定义&#xff1a; 基本组成部分 工作流程 卷积层&#xff08;卷积定义&#xff09;【CONV】&#xff1a; 卷积层&#xff08;Convolutional Layer&#xff09; 特征提取&#xff1a;卷积层的主要作用是通过卷积核&#xff08;或滤波器&#xff09;运算提…

element-ui 中el-calendar 日历插件获取显示的第一天和最后一天【原创】

需要获取el-calendar 日历组件上的第1天和最后一天。可以通过document.querySelector()方法进行获取dom元素中的值&#xff0c;这样避免计算问题。 获取的过程中主要有两个难点&#xff0c;第1个是处理上1月和下1月的数据&#xff0c;第2个是跨年的数据。 直接贴代码&#xff…

一个高度可扩展的 Golang ORM 库【GORM】

GORM 是一个功能强大的 Golang 对象关系映射&#xff08;ORM&#xff09;库&#xff0c;它提供了简洁的接口和全面的功能&#xff0c;帮助开发者更方便地操作数据库。 1. 完整的 ORM 功能 • 支持常见的关系模型&#xff1a; • Has One&#xff08;一对一&#xff09; • …

【大数据学习 | Spark-Core】Spark的改变分区的算子

当分区由多变少时&#xff0c;不需要shuffle&#xff0c;也就是父RDD与子RDD之间是窄依赖。 当分区由少变多时&#xff0c;是需要shuffle的。 但极端情况下&#xff08;1000个分区变成1个分区)&#xff0c;这时如果将shuffle设置为false&#xff0c;父子RDD是窄依赖关系&…

IDEA2024如何创建Web项目以及配置Tomcat

在Web项目的开发过程中&#xff0c;Tomcat作为一款开源的Servlet容器&#xff0c;扮演着至关重要的角色。它不仅能够提供稳定的运行环境&#xff0c;还支持多种Java EE规范&#xff0c;为开发者提供了丰富的功能支持。因此&#xff0c;正确配置Tomcat服务器对于确保Web项目的顺…

【通俗理解】隐变量的变分分布探索——从公式到应用

【通俗理解】隐变量的变分分布探索——从公式到应用 关键词提炼 #隐变量 #变分分布 #概率模型 #公式推导 #期望最大化 #机器学习 #变分贝叶斯 #隐马尔可夫模型 第一节&#xff1a;隐变量的变分分布的类比与核心概念【尽可能通俗】 隐变量的变分分布就像是一场“捉迷藏”游戏…

亚信安全与飞书达成深度合作

近日&#xff0c;亚信安全联合飞书举办的“走近先进”系列活动正式走进亚信。活动以“安全护航信息化 共筑数字未来路”为主题&#xff0c;吸引了众多数字化转型前沿企业的近百位领导参会。作为“走近先进”系列的第二场活动&#xff0c;本场活动更加深入挖掘了数字化转型的基础…

【Vue】 npm install amap-js-api-loader指南

前言 项目中的地图模块突然打不开了 正文 版本太低了&#xff0c;而且Vue项目就应该正经走项目流程啊喂&#xff01; npm i amap/amap-jsapi-loader --save 官方说这样执行完&#xff0c;就这结束啦&#xff01;它结束了&#xff0c;我还没有&#xff0c;不然不可能记录这篇文…

使用ENSP实现默认路由

一、项目拓扑 二、项目实现 1.路由器AR1配置 进入系统试图 sys将路由器命名为R1 sysname R1关闭信息中心 undo info-center enable 进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为2.2.2.1/24 ip address 2.2.2.1 24进入g0/0/1接口 int g0/0/1将g0/0/1接口IP地址配置为1.…

Ansible--自动化运维工具

Ansible自动化运维工具介绍 1.Ansible介绍 Ansible是一款自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、cfengine、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令等功能。…

WSL安装不同版本ubuntu(已有ubuntu20.04,再装ubuntu18.04)

参考&#xff1a; 如何在 WSL 中删除指定版本的 Ubuntu&#xff08;以删除 Ubuntu 22.04 为例&#xff09;_wsl卸载某个-CSDN博客 已有ubuntu20.04&#xff0c;现在再安装一个ubuntu18.04 直接参考下面我写的链接的第四步&#xff0c;前面的步骤都不需要再做了 Win11安装WSL…

深度学习:GPT-1的MindSpore实践

GPT-1简介 GPT-1&#xff08;Generative Pre-trained Transformer&#xff09;是2018年由Open AI提出的一个结合预训练和微调的用于解决文本理解和文本生成任务的模型。它的基础是Transformer架构&#xff0c;具有如下创新点&#xff1a; NLP领域的迁移学习&#xff1a;通过最…

websocket是什么?

一、定义 Websocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;它允许服务器主动向客户端推送数据&#xff0c;而不需要客户端不断的轮询服务器来获取数据 与http协议不同&#xff0c;http是一种无状态的&#xff0c;请求&#xff0c;响应模式的协议(单向通信)&a…

1-golang_org_x_crypto_bcrypt测试 --go开源库测试

1.实例测试 package mainimport ("fmt""golang.org/x/crypto/bcrypt" )func main() {password : []byte("mysecretpassword")hashedPassword, err : bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)if err ! nil {fmt.Println(err)…

CSS —— 子绝父相

相对定位&#xff1a;占位&#xff1b;不脱标 绝对定位&#xff1a;不占位&#xff1b;脱标 希望子元素相对于父元素定位&#xff0c;又不希望父元素脱标&#xff08;父元素占位&#xff09; 子级是 绝对定位&#xff0c;不会占有位置&#xff0c; 可以放到父盒子里面的任何一…

风尚云网前端学习:一个简易前端新手友好的HTML5页面布局与样式设计

风尚云网前端学习&#xff1a;一个简易前端新手友好的HTML5页面布局与样式设计 简介 在前端开发的世界里&#xff0c;HTML5和CSS3是构建现代网页的基石。本文将通过一个简单的HTML5页面模板&#xff0c;展示如何使用HTML5的结构化元素和CSS3的样式特性&#xff0c;来创建一个…

django authentication 登录注册

文章目录 前言一、django配置二、后端实现1.新建app2.编写view3.配置路由 三、前端编写1、index.html2、register.html3、 login.html 总结 前言 之前&#xff0c;写了django制作简易登录系统&#xff0c;这次利用django内置的authentication功能实现注册、登录 提示&#xff…

ctfshow单身杯2024wp

文章目录 ctfshow单身杯2024wp签到好玩的PHPezzz_sstiez_inject ctfshow单身杯2024wp 签到好玩的PHP 考点&#xff1a;序列化反序列化 <?phperror_reporting(0);highlight_file(__FILE__);class ctfshow {private $d ;private $s ;private $b ;private $ctf ;public …

ISUP协议视频平台EasyCVR萤石设备视频接入平台银行营业网点安全防范系统解决方案

在金融行业&#xff0c;银行营业厅的安全保卫工作至关重要&#xff0c;它不仅关系到客户资金的安全&#xff0c;也关系到整个银行的信誉和运营效率。随着科技的发展&#xff0c;传统的安全防护措施已经无法满足现代银行对于高效、智能化安全管理的需求。 EasyCVR视频汇聚平台以…